SQL调优简介及调优方式
2018-03-04 21:35
274 查看
引导语:我曾有一种感觉,不管何种调优方式,索引是最根本的方法,是一切优化手法的内功,所以一下我们将讨论一些和索引相关的调优方式。在日常工作或交流中,经常会讨论一些关于sql调优的问题,然后总结了下,下面我们主要是从软件方面进行分析,希望对你有帮助: 索引可以新建、删除、重建。 注:下面介绍的调优手段只是一些常规条件下的优化手法,具体的优化效果是与使用的DBMS以及数据的特点密切相关的,需要根据具体的情况使用不同的优化手法,否则有可能适得其反。 ①:创建必要的索引 在经常需要进行检索的字段上创建索引,比如要按照姓名进行检索,那么就应该在姓名字段上创建索引,如果经常要按照员工部门和员工岗位级别进行检索,那么就应该在员工部门和员工岗位级别这两个字段上创建索引。创建索引给检索带来的性能提升往往是巨大的,因此在发现检索速度过慢的时候应该首先想到的就是创建索引。 ②:使用预编译查询 程序中通常是根据用户的输入来动态执行SQL,这时应该尽量使用参数化SQL,这样不仅可以避免SQL注入漏洞攻击,最重要数据库会对这些参数化SQL进行预编译,这样第一次执行的时候DBMS会为这个SQL语句进行查询优化并且执行预编译,这样以后再执行这个SQL的时候就直接使用预编译的结果,这样可以大大提高执行的速度。 ③:调整Where字句中的连接顺序 DBMS一般采用自下而上的顺序解析where字句,根据这个原理表连接最好写在其他where条件之前,那些可以过滤掉最大数量记录。 ④:尽量将多条SQL语句压缩到一句SQL中 每次执行SQL的时候都要建立网络连接、进行权限校验、进行SQL语句的查询优化、发送执行结果,这个过程是非常耗时的,因此应该尽量避免过多的执行SQL语句,能够压缩到一句SQL执行的语句就不要用多条来执行。 ⑤:用where字句替换HAVING字句 避免使用HAVING字句,因为HAVING只会在检索出所有记录之后才对结果集进行过滤,而where则是在聚合前刷选记录,如果能通过where字句限制记录的数目,那就能减少这方面的开销。HAVING中的条件一般用于聚合函数的过滤,除此之外,应该将条件写在where字句中。 ⑥:使用表的别名 当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个列名上。这样就可以减少解析的时间并减少哪些友列名歧义引起的语法错误。 ⑦:在in和exists中通常情况下使用EXISTS,因为in不走索引。 ⑧:避免在索引上使用计算 在where字句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表查询,函数属于计算的一种 效率低:select * from person where salary*12>25000(salary是索引列) 效率高:select * from person where salary>25000/12(salary是索引列) ⑨:用union all替换union 当SQL语句需要union两个查询结果集合时,即使检索结果中不会有重复的记录,如果使用union这两个结果集同样会尝试进行合并,然后在输出最终结果前进行排序,因此如果可以判断检索结果中不会有重复的记录时候,应该用union all,这样效率就会因此得到提高。 ⑩:避免SQL中出现隐式类型转换 当某一张表中的索引字段在作为where条件的时候,如果进行了隐式类型转换,则此索引字段将会不被识别,因为隐式类型转换也属于计算,所以此时DBMS会使用全表扫面。 最后需要注意的是:防止检索范围过宽 如果DBMS优化器认为检索范围过宽,那么将放弃索引查找而使用全表扫描。下面几种可能造成检索范围过宽的情况。 a、使用is not null或者不等于判断,可能造成优化器假设匹配的记录数太多。 b、使用like运算符的时候,“a%”将会使用索引,而“a%c”和“%a”则会使用全表扫描,因此“a%c”和“%a”不能被有效的评估匹配的数量。转载:http://blog.csdn.net/u011463470/article/details/51016928
相关文章推荐
- SQL调优简介及调优方式
- SQL调优简介及调优方式
- 三种攻击方式简介xss,crsf,sqlins
- STA(SQL Tuning Advisor) SQL调优顾问简介
- 【SQL工具】SQL调优和诊断神器SQLTXPLAIN (SQLT)简介
- SQL调优 之 连接方式
- SQL调优日记之发挥SQL性能与你的写法有关--对比三种方式实现相同功能
- SQL调优(连接方式)
- 《Spark商业案例与性能调优实战100课》第9课:商业案例之通过Spark SQL 下两种不同方式实现口碑最佳和最热门电影比较
- SQL调优(连接方式)
- SQL删除数据的各种方式总结
- MixPHP 独特的SQL构建方式
- DB2 SQL方式查看版本
- SQL学习笔记[5] - 通过分隔符解析方式实现向SQL存储过程传递数组参数
- sqlplus登陆方式
- MySQL 处理海量数据时的SQL语句调优
- 监控和剖析数据库操作 -- P6Spy、SQL Profiler、IronTrack SQL 使用简介
- oracle sql性能调优
- 三种SQL分页方式
- 拼接字符SQL语句拼接 最后一个字符多出 处理方式