sql语句如何优化?


本文摘自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

select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

1

select id from t where num=0

3)、应尽量避免在 where 子句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描

4)、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

1

select id from t where num=10 or num=20

可以这样查询:

1

2

3

select id from t where num=10   

union all   

select id from t where num=20

5)、慎用in 和 not in,否则会导致全表扫描,如:

1

select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

1

select id from t where num between 1 and 3

6)、合理使用like模糊查询

有的时候会需要进行一些模糊查询比如:

1

select * from contact where username like ‘%yue%’

关键词 %yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%

阅读剩余部分

相关阅读 >>

php实现获取mysql数据库的记录数据

详解mysql插入数据后返回自增id的七种方法

mysql易学易用之mysql不为人知的特性

浅析sql server的分页方式 isnull与coalesce性能比较

c#数据库操作的用法

sql中insert如何批量插入多条记录?

sql更新记录的命令是什么

mysqlsql是干什么的?

php实现的简单操作sqlite数据库类与用法示例

mysql闪回工具binlog2sql安装配置教程详解

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

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



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...