手机版

数据库-SQL优化

发布时间:2021-06-07   来源:未知    
字号:

SQL数据库优化

数据库

-cmquan

iSoftStone Technologies Ltd.2013-7-13

SQL数据库优化

SQL优化

1. 使用WHERE子句过滤行 2. 使用表连接而不是多个查询 3. 执行连接时使用完全限定的列引用 4. 使用CASE表达式而不是多个查询 5. 索引 6. 使用WHERE而不是HAVING 7. 使用UNION ALL而不是UNION 8. 使用EXISTS而不是IN 9. 使用EXISTS而不是DISTINCT

2

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

1. 使用WHERE子句过滤行 使用where条件语句。

Where子句中应避免使用函数,否则会增加执行时间。

3

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

2. 使用表连接而不是多个查询 例: 现有products,product_type表。查询出商品为“苹果”的基本 信息及类型。--BAD select name, product_type_id from products where name = '苹果‘ select name from product_type where id = 1

--GOOD select , p.product_type_id, from products p, product_type pt where p.product_type_id = pt.id and = '苹果'

4

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

执行一个查询通常比执行两个查询效率高。

查询中必须选择连接顺序,将数据量比较少的放在后边。 比如:要连接3个相关表table1,table2,table3。假设table1有1000 行,table2有100行,table3有10行。首先应将table2连接到table1上 ,接着是table2和table3。

5

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

3. 执行连接时使用完全限定的列引用 例:products,product_type。多表链接查询所有数据。

--BAD select , , description, price from products p, product_type pt where p.product_type_id = pt.id

--GOOD select , , p.description, p.price from products p, product_type pt where p.product_type_id = pt.id

6

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

4. 使用CASE表达式而不是多个查询 例: 查询products表中的价格小于20、20到500之间、大于500的数量

。--BAD select count(id) countNum from products where price < 20 --GOOD select count(id) countNum from products where price between 20 and 500 select count(id) countNum from products where price > 500

select count(case when price < 20 then 1 else null end) low, count(case when price between 20 and 500 then 1 else null end) med, count(case when price > 500 then 1 else null end) high from products7

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

5. 索引(index) 理解为一种特殊的目录。

1、聚集索引 2、非聚集索引

8

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

聚集索引: 确定表中数据的物理顺序。

例: 汉语字典的正文本身就是一个聚集索引。 汉语字典的排序是从“a”到“z”。如果查询“安”,就会在 “a”部分里找,如果找不到就属于没有这个字。

9

©2005 iSoftStone Technologies Ltd. A

ll rights reserved.

SQL数据库优化

SQL优化

聚集索引:

适用于聚集索引的情况包括: 1、含有大量非重复值的列。 2、使用BETWEEN,>,>=,<或<=返回一个范围值的列 3、被连续访问的列 4、返回大型结果集的查询 5、经常被使用连接或GROUP BY子句的查询访问的列

10

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

非聚集索引: 该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

例: 汉语字典。 当你遇到一个不认识的字的时候,就不能用聚集索引来查询,这 时候需要用到“偏旁部首”查到您要找的字,然后根据这个字后的 页码直接翻到某页来找到你要找的字。 这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集 索引”。

11

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

一个表或视图中最多有250个非聚集排序或有249个非聚集排序一个 聚集排序。

12

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

6. 使用WHERE而不是HAVINGwhere:过滤行 having:过滤行组。(先分组后过滤)

例:查询商品类型为1和2的平均价格(products)。--BAD select product_type_id, avg(price) price_avg from products group by product_type_id having product_type_id in (1, 2) --GOOD select product_type_id, avg(price) price_avg from products where product_type_id in (1, 2) group by product_type_id13

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

7. 使用UNION ALL而不是UNIONunion all:获得2个查询检索到的所有行,包括重复行。 union:获得2个查询检索到的所有不重复行。

例:--BAD select * from products union select * from pros

--GOOD select * from products union all select * from pros

14

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

8. 使用EXISTS而不是INin:检查一个值是否包含在列表中。 exists:检查是否存在。

例:--BAD select * from pros where id in ( select product_id from purchases_test ) --GOOD select o.* from pros o where exists ( select 1 from purchases_test i where i.product_id = o.id )

15

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

SQL优化

9. 使用EXISTS而不是DISTINCTdistinct:禁止重复行的显示。 exists:检查是否存在。

例:--BAD select distinct pr.id, from pros pr, purchases_test pu where pr.id = pu.product_id --GOOD select o.id, from pros o where exists( select 1 from purchases_test i where i.product_id = o.id )

16

©2005 iSoftStone Technologies Ltd. All rights reserved.

SQL数据库优化

谢谢!

iSoftStone Technologies Ltd.2013-7-13

数据库-SQL优化.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)