本文摘自PHP中文网,作者青灯夜游,侵删。
sql语句优化的几种方法有:1、统一SQL语句的格式;2、对查询进行优化,应尽量避免全表扫描;3、SQL语句要简洁;4、考虑使用“临时表”暂存中间结果;5、尽量避免大事务操作;6、尽量避免向客户端返回大数据量。下面本篇文章就来给大家具体介绍一些,希望对大家有所帮助。我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。
sql语句优化的几种方法:
1、统一SQL语句的格式
对于以下两句SQL语句,很多人认为是相同的,但是,数据库查询优化器认为是不同的。
● select * from dual
● select * From dual
虽然只是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!
2、少用 * ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
3、对查询进行优化,应尽量避免全表扫描
1)、应考虑在 where 及 order by 涉及的列上建立索引。
2)、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
1 |
|
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
1 |
|
3)、应尽量避免在 where 子句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描
4)、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
1 |
|
可以这样查询:
1 2 3 |
|
5)、慎用in 和 not in,否则会导致全表扫描,如:
1 |
|
对于连续的数值,能用 between 就不要用 in 了:
1 |
|
6)、合理使用like模糊查询
有的时候会需要进行一些模糊查询比如:
1 |
|
关键词 %yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%
相关阅读 >>
浅析sql server的分页方式 isnull与coalesce性能比较
更多相关阅读请进入《sql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。