• 注册
当前位置:代码四四五 > 默认分类 >正文

索引对查询效率的影响

0.参考文献

http://msdn.microsoft.com/zh-cn/library/ms172984(SQL.90).aspx

1.实验数据

我们将利用AdvantureWords2008R2中的Sales.SalesOrderDetail表,其中有12万条数据,非常适合用于测试。不过我们不直接在这张表上做测试,因为这张表上已经有索引了。我们需要新建一张表,将该表中的数据导入我们新建的test和test2表。test和test2的创建方法有两种,我们选择第二种。

索引对查询效率的影响 View Code

2.聚集索引与非聚集索引对查询效率的影响

下面我们将通过实验来说明聚集索引和非聚集索引在查询效率上的影响。根据logic read以及execution plan我们能够更加清晰知道索引的结构,以及sql server是如何查找数据的。

索引对查询效率的影响 View Code

3.复合索引

数据库中经常会存在复合索引,那么复合索引在什么情况下会起到查询优化作用,又在什么情况下起不到作用呢。如果查询条件是复合索引的非leading column,那么索引不起作用,不会使用这个复合索引。

索引对查询效率的影响 View Code

PS:2012-9-3

今天看到了博客园中的 数据库查询性能优化之利器—索引(二) ,看着觉得有点不对劲,所以对文中的疑点进行测试。

疑问一:一次查询只能使用一个索引

参考: http://www.itpub.net/thread-1623492-1-1.html

首先我们准备实验数据,在这里我新建一张OrderDetail2,并将 adventureworks2008r2的 AdventureWorks2008R2.Sales.SalesOrderDetail表中的其中四列导入OrderDetail2表中,TSQL如下所示:

索引对查询效率的影响 View Code

然后我们按照UnitPrice来查询,查询语句如下:

select * from OrderDetail2 where UnitPrice =5.70

其查询计划如下:

索引对查询效率的影响

索引对查询效率的影响

从上述查询计划我们可以看出,一个查询使用了两个索引。在idx_nc_UnitPrice上面是哦那个了Index Seek,而在PK_SalesOrderDetailId上面使用了Clustered Index Seek。

疑问二:mutilindex(name,age,tel)。对于mutilindex,若判别条件为(name),(name,age),(name,age,tel)都可以使用该索引,而(name,tel),(age,tel),(tel)都不能够使用该做引。

接下来我们创建一个复合索引包含SalesOrderID,CarrierTrackingNumber,UnitPrice这三个列,然后测试复合索引在什么情况下会被使用。创建复合索引的TSQL如下所示:

索引对查询效率的影响 View Code

(1)然后我们将查询条件设定为复合索引的 引导列 ,我们会发现: where条件是引导列,不论查询的是所有列或者是单列SalesOrderID,都使用了复合索引,而没有使用单列索引 。TSQL查询如下所示:

索引对查询效率的影响 View Code

查询计划如下图所示:

索引对查询效率的影响

(2)如果查询条件是非引导列,那么将使用单列索引,而不使用复合索引,TSQL查询如下所示,执行计划在疑问一中已经给出。

索引对查询效率的影响 View Code

(3)where查询条件包含了引导列,那么不论引导列在where条件的何处(多条件情况),都会使用复合索引。

索引对查询效率的影响 View Code

查询计划如(1)所示。

(4)不包含引导列。假如where条件不包含引导列,那么将不会使用复合索引。比如执行如下TSQL查询,就没有使用复合索引,而是使用了两个单列各自的非聚集索引。这又是一个“一个查询可以使用多个索引”的例子。

select * from OrderDetail2 where CarrierTrackingNumber='48F0-4F3E-AE' and UnitPrice=1.374

上述查询的查询计划如下图所示:

索引对查询效率的影响

索引对查询效率的影响

总结:对于符合复合mutilindex(name,age,tel)。若判别条件为(name),(name,age),(name,tel),(name,age,tel)都可以使用该复合索引,而(age,tel),(tel)都不能够使用该做引。

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/07/19/2599494.html,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 162202241@qq.com

最新评论
  • 黄榕富
    2024-04-04 电脑端
    # 1楼
    索引对查询效率的影响有哪些

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 昌韵琳
    2024-04-04 电脑端
    # 2楼
    索引对查询效率的影响大吗

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 充泽
    2024-04-04 电脑端
    # 3楼
    索引对查询效率的影响分析

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 养琳
    2024-04-04 电脑端
    # 4楼
    索引能够提高查询效率

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 温榕维
    2024-04-04 电脑端
    # 5楼
    是越多越好吗?

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 常保
    2024-04-04 电脑端
    # 6楼
    索引影响查询的速度嘛

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 万策岚
    2024-04-04 电脑端
    # 7楼
    索引能够提高查询效率

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 谭凡琰
    2024-04-04 电脑端
    # 8楼
    索引查询的原理

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 权若
    2024-04-04 电脑端
    # 9楼
    索引可以确保数据查询的准确率吗?

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 舒秀悦
    2024-04-04 电脑端
    # 10楼
    利用索引查询数据提高性能

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 糜惠杰
    2024-04-04 电脑端
    # 11楼
    索引和查询

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复

欢迎您发表评论:

请登录之后再进行评论

登录