SQL优化总结

来源:互联网 发布:visio 数据库图标 编辑:程序博客网 时间:2024/06/11 10:05

做业务的同学应该深有体会当数据量起来或访问量翻倍后,会出现sql查询缓慢,甚至抛出异常,无法得到正确的结果。这时候sql优化就相当必要了。正确的SQL优化,可以达到20%的时间获得80%的性能。遵循一些基本的原则,就能达到sql优化的效果,一下是我总结的几点,失误之处,望各位大侠指正。

1、检查索引

索引就像字典的目录一样,可以加速查询的效果。然而索引并不是越多越好,索引也会影响插入数据的效率。

1)最左前缀匹配原则

会一直向右匹配知道遇到范围查询(<,>,between,like)就停止匹配,比如简历(a,b,c,d)顺序索引,执行a=1 and b=2 and c>3 and d=4,这时d是不走索引的。

                2)尽量选择区分度高的列作为索引(性别、状态等字段)

3)索引列不能参与计算

b+树中存的都是数据表中的字段值,但进行检索时,需要把所有的元素都应用函数才能比较,成本太大。

                4)为经常需要排序、分组和联合操作的字段建立索引

               

               聚集索引(索引叶子就是数据本身)的适用情况

包含大量非重复值的列、被连续访问的列、返回大型结果集的查询、经常需要排序、分组和联合操作的列

2、限制结果集

尽量减少返回的结果行,包括行数和字段列数

结果集过大可能带来极重的磁盘IO,更有可能把数据库缓冲区中其他缓存数据挤出,使得这些数据下次必须再从磁盘读取。

3、尽量减少表连接

连接的表越多,其编译的时间和开销越大,性能也越不好控制。

                outer join也非常不好,会对左表和右表查询所有行。尽量使用inner join

4、OLAP和OLTP模块要分开

先来了解下OLTP和OLAP的概念:

OLTP 联机事务处理(on-line transaction processing)系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP 联机分析处理(On-Line Analytical Processing)系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。 

OLAP往往需要扫描整个表做统计分析,索引对这样的语句几乎没用。所以很难对OLAP类型的sql语句进行优化。

5、优化查询

 避免在where使用!=、<>、is null、like前置%、or、in、not in、  都会导致执行引擎放弃索引而进行全表扫描

                    

         

         

1 0
原创粉丝点击