SQL优化的一些知识

(本文主要讲解SQL的优化,不涉及数据库配置方面的调整,关于数据库如何配置,等之后有时间再写,此内容结合工做经验和网上内容简要总结,不足之处还请多多指正)sql

1.问什么须要对SQL进行优化?数据库

程序上线使用的初期,因为业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也没法判断SQL对程序的运行效率有多大,故不多针对SQL进行专门优化(注释1)。而随着时间的积累,业务数据量的增多,SQL的执行效率对程序运行效率的影响逐渐增大,此时对SQL的优化就颇有必要。运维

2.SQL优化的原则分布式

SQL优化的原则就是尽一切可能提升SQL的执行效率函数

3.SQL优化的方法性能

1)设计数据库表结构时,要对表作数量级和性能影响预测和评估,表的字段尽可能都设置default值,尽可能避免default为null,主要防止在执行SQL查询时直接将查询条件设置为null或者not null而致使数据库放弃索引,直接全表扫描;测试

2)SQL条件中容许出现库函数和左模糊查询,sql条件中库函数会致使数据库执行时放弃索引,直接全表扫描,而左模糊也是,直接就全表扫描了;大数据

3)原则上,SQL条件中避免出现<>,in,not in,exists,not exists等操做符;优化

4)子查询中的实际查询结果要设置上限要求,且子查询必需要有索引支持,不然子查询也去扫描全表就悲剧了;设计

5)单个事务的SQL语句数量要有上限要求,不能前台一个提交操做,后台要去插入几十张表的数据,那若是是千万级用户数,基本上就光去插入数据了;

6)同上一条相似,单条SQL语句的数据影响量也要有上限要求,不能一个update操做更新了上千条数据;

7)尽可能减小多表关联的SQL,若是必须使用多表关联,也尽可能减小关联的表数量,且多表关联时,关联字段必须包含在查询索引中。多表关联SQL中尽可能不要使用视图和代理表。

8)充分利用索引,严禁出现表扫描。同时,建立表时也注意索引的字段顺序。

 

注释1:通常状况下,不一样的行业数据量水平相对而言是比较固定的,好比电信行业的数据主要以用户数为基准,按照省级行政单位划分,数量级在千万到亿级之间。而法院的数据主要以案件数为基准,按照市级行政单位划分,数量级在百万到千万之间。(这里只是简要描述一下,实际数据量比这个大得多啊~)通常状况下,系统上线前都会针对不一样行业不一样地区的数据量作一个估算,而后再经过超大数据量对系统进行性能测试。可是若是遇到技术升级更新或者部署方式发生改变(好比数据集中存放到云上或者分布式部署改成大集中部署),那数据量几乎是十倍百倍的增加,这时候前期SQL执行效率的问题就会暴露出来。

 

注释2:发现一个博客,写SQL优化描述的也比较到位,能够参考下:http://database.51cto.com/art/201407/445934.htm

相关文章
相关标签/搜索