SQL语句优化方法详细介绍
1. 选择最有效率的表名顺序, FROM子句中写在最后的表(基础表 table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.汗颜!!以前以为 table,都是多条记录呢,怪不得以前写的查询速度这么慢。
2.Where子句中的连接顺序.:
数据库采用自下而上的顺序解析Where子句,根据这个原理,表之间的连接必须写在其他Where条件之前, 那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.最后。这个貌似一直这么写的,不过那是在里面的,前面都是用的JOIN
3.整合简单,无关联的数据库访问:
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系),这个我没有体会,貌似都是按照业务逻辑把它们分成了一小块一小块的呢
4.尽量缩小子查询的结果。
5.用替代IN、用NOT 替代NOT IN。貌似我做项目的时候只在少数基于条件的表连接才会用,基本不用IN 和NOT IN。
6.避免在索引列上使用计算.
Where子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 7,用>=替代> 这个我也不是特别明白,>是IS NOT?
8,用UNION替换OR (适用于索引列)
通常情况下, 用UNION替换Where子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的'例子中, 和上都建有索引.这个在项目中我是有遇到过的,我写了个临时表的函数,其他的SQL需要和临时表连接起来,因为业务逻辑比较复杂,连接的时候速度很慢,后来把OR都改成了UNION ALL
9,避免在索引列上使用IS NULL和IS NOT NULL
10,避免改变索引列的类型
11. 需要当心的Where子句:
某些 语句中的Where子句不使用索引. 这里有一些例子.
在下面的例子里, (1)‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||'是字符连接函数. 就象其他函数那样, 停用了索引.
(3) ‘+'是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描.
12. 优化GROUP BY:提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.
13. 避免使用耗费资源的操作:
带有,UNION,MINUS,,ORDER BY的SQL语句会启动SQL引擎
执 行耗费资源的排序(SORT)功能. 需要一次排序操作, 而其他的至少需要执行两次排序. 通常, 带有UNION, MINUS , 的SQL语句都可以用其他方式重写. 如果你的数据库的调配得好, 使用UNION , MINUS, 也是可以考虑的, 毕竟它们的可读性很强
.IN SSMS,If you want to see how much cpu time did one query ,you can use the flow:
SET IO ON
set time on
your query
set time off
and after this you have to look not
【SQL语句优化方法详细介绍】相关文章:
1.SQL语句优化的经验
2.SQL语句的优化问题教程
3.SQL语句编写与优化规范
4.关于sql语句优化的知识
5.SQL优化大全
6.关于MySQL开启记录执行过的SQL语句方法
7.Yii使用命令执行sql语句方法
8.使用sql语句查询日期的方法
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。