您的位置:首页 > 数据库

关于如何进行SQL优化的一些方法和准则

2017-02-20 16:19 471 查看
        本篇博文主要讲解关于SQL的优化的一些基础只是,不涉及数据库配置以及其他方面的知识,这些内容主要是结合几年的工作经验和网上内容进行简要的总结说明,不足之处还请大家多多指正。

1、为什么要对SQL进行优化

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

2、SQL优化的准则

        这个我们可以使用一句话来总结:SQL优化的准则就是尽一切可能提高SQL的执行效率,从而使得我们程序的运行速度很快。

3、SQL优化的一些方法

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

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

③ 原则上,SQL条件中避免出现<>,in,not in,exists,not exists等操作符;

④ 子查询中的实际查询结果要设置上限要求,且子查询必须要有索引支持,否则子查询也去扫描全表就悲剧了;

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

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

⑦ 尽量减少多表关联的SQL,如果必须使用多表关联,也尽量减少关联的表数量,且多表关联时,关联字段必须包含在查询索引中。多表关联SQL中尽量不要使用视图和代理表;

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

4、其他的话

        一般情况下,不同的行业数据量水平相对而言是比较固定的,比如电信行业的数据主要以用户数为基准,按照省级行政单位划分,数量级在千万到亿级之间。而法院的数据主要以案件数为基准,按照市级行政单位划分,数量级在百万到千万之间。(这里只是简要描述一下,实际数据量比这个大得多啊~)一般情况下,系统上线前都会针对不同行业不同地区的数据量做一个估算,然后再通过超大数据量对系统进行性能测试。但是如果遇到技术升级更新或者部署方式发生改变(比如数据集中存放到云上或者分布式部署改为大集中部署),那数据量几乎是十倍百倍的增长,这时候前期SQL执行效率的问题就会暴露出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 优化