SQL语句的优化

sql语句的性能达不到你的要求,执行的效率让你忍无可忍,一般会是下面几种情况。

  1.网速不给力,不稳定。

  2.服务器内存不够,或者SQL被分配的内存不够。

  3.sql语句设计不合理

  4.没有相应的索引,索引不合理

  5.没有有效的索引视图

  6.表数据过大没有有效的分区设计

  7.数据库设计太2,存在大量的数据冗余

  8.索引列上缺少相应的统计信息,或者统计信息过期。

  ……

select查询艺术

  1.保证不查询多余的列与行。

    (1)尽量避免select * 的存在,使用具体的列代替 * ,避免多余的列;

    (2)使用where限定具体要查询的数据,避免多余的行;

    (3)使用top,distinct关键字减少多余重复的行。

  2.慎用distinct关键字。

    (1)distinct在查询一个字段或者很少字段的情况下使用,会避免重复数据的出现,给查询带来优化效果。

      但是查询字段很多的情况下使用,则会打打降低查询效率。

    (2)带distinct语句cpu时间和占用时间都高于不带distinct的语句。原因是当查询很多字段时,如果使用distinct,数据库引擎就会对数据进行比较,过滤掉

      重复数据,然而这个比较,过滤的过程则会毫不客气的占用系统资源,cpu时间。

  3.慎用union关键字

    此关键字主要功能是把各个查询语句的结果集合合并到一个结果集中返回给你。

用法:
<select 语句1>
union
<select 语句2>
union
<select 语句3>
...

  满足union的语句必须满足:1.列数相同。2.对应列数的数据类型要保持兼容。

  执行过程:

  依次执行select语句-- >>合并结果集 -->> 对结果集进行排序,过滤重复记录。

  如果不对结果集排序过滤,显然效率是比union高的,那么不排序过滤的关键字有吗?

  答:是有的,他是union all,使用union all能对union进行一定的优化。

  4.连接查询的优化

    首先你要弄明白你想要的数据是什么样子的,然后再做出决定使用哪一种连接,这很重要。

    各种连接的取值大小为:

      (1)内连接结果集大小取决于左右表满足条件的数量。

      (2)左连接取决与左表大小,右相反。

      (3)完全连接和交叉连接取决与左右两个表的数据总数量。

    由此可见减少连接表的数据数量可以提高效率。

优化修改删除语句

  如果你同时修改或删除过多数据,会造成cpu利用率过高从而影响别人对数据库的访问。

  如果你删除或修改过多数据,采用单一循环操作,那么会是效率很低,也就是操作时间过程会很漫长。

  这样该怎么做呢?

  这种的办法就是,分批操作数据。

delete product where id < 1000
delete product where id >= 1000 and id < 2000
delete product where id >= 2000 and id < 3000

  当然这样的优化方式不一定是最优的选择,这要根据你系统的访问热度来定夺,关键你要明白什么样的语句是什么样的效果。

总结: 优化,最重要的是在于你平时设计语句,数据库的习惯,方式。如果你平时不在意,汇总到一块再做优化,你就需要耐心的分析,然后分析的过程就是看你的悟性,需求,知识水平啦。

参考:https://www.cnblogs.com/knowledgesea/p/3686105.html

原文地址:https://www.cnblogs.com/lu97/p/14162893.html