首页 > 互联网 > 设计制作 > 网页设计 > SQL语句优化方法详细介绍

SQL语句优化方法详细介绍

   来源:学问社    阅读: 1.44W 次
字号:

用手机扫描二维码 在手机上继续观看

手机查看

1. 选择最有效率的表名顺序, FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.汗颜!!以前以为dimensional table,都是多条记录呢,怪不得以前写的查询速度这么慢。

SQL语句优化方法详细介绍

e子句中的连接顺序.:

数据库采用自下而上的顺序解析Where子句,根据这个原理,表之间的连接必须写在其他Where条件之前, 那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾NG最后。这个貌似一直这么写的,不过那是在SQLSERVER里面的,前面都是用的JOIN

3.整合简单,无关联的数据库访问:

如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系),这个我没有体会,貌似都是按照业务逻辑把它们分成了一小块一小块的呢

4.尽量缩小子查询的结果。

5.用EXISTS替代IN、用NOT EXISTS替代NOT IN。貌似我做项目的时候只在少数基于条件的表连接才会用EXISTS,基本不用IN 和NOT IN。

6.避免在索引列上使用计算.

Where子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描. 7,用>=替代> 这个我也不是特别明白,>是IS NOT?

8,用UNION替换OR (适用于索引列)

通常情况下, 用UNION替换Where子句中的OR将会起到较好的效果. 对索引列使用OR将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有column没有被索引, 查询效率可能会因为你没有选择OR而降低. 在下面的'例子中, LOC_ID 和REGION上都建有索引.这个在项目中我是有遇到过的,我写了个临时表的函数,其他的SQL需要和临时表连接起来,因为业务逻辑比较复杂,连接的时候速度很慢,后来把OR都改成了UNION ALL

9,避免在索引列上使用IS NULL和IS NOT NULL

10,避免改变索引列的类型

11. 需要当心的Where子句:

某些Select 语句中的Where子句不使用索引. 这里有一些例子.

在下面的例子里, (1)‘!=' 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中. (2) ‘||'是字符连接函数. 就象其他函数那样, 停用了索引.

(3) ‘+'是数学函数. 就象其他数学函数那样, 停用了索引. (4)相同的索引列不能互相比较,这将会启用全表扫描.

12. 优化GROUP BY:提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.

13. 避免使用耗费资源的操作:

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎

执 行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序. 通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写. 如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑的, 毕竟它们的可读性很强

SSMS,If you want to see how much cpu time did one query consumed,you can use the following flow:

SET STATISTICS IO ON

set statistics time on

execute your query

set statistics time off

and after this you have to look messages window not results window

动画设计
网页设计
环境设计
美工设计
平面设计
计算机辅助设计
广告设计
室内外设计