【发布时间】:2013-11-28 20:11:48
【问题描述】:
我正在运行 SQL Server 2012 培训书中的示例数据库,学习了一些关于索引的知识,所以我想尝试看看它是如何工作的。
Orders 表在 shippostalcode 上有一个索引,所以我尝试将它放在 where 子句中,我知道该表中有 850 多条记录,并且此代码拆分得很好:
10328
10195
10342
10318
10196
10139
10294
10354
10199
10157
10137
10258
10274
10286
10158
10167
10329
10351
那么当我这样做时,为什么我会得到一个聚集索引扫描,我读到它与次优的表扫描是一样的?
编辑:
我做到了:
SELECT [orderid]
,[shippostalcode]
FROM [TSQL2012].[Sales].[Orders]
WHERE shippostalcode = '10307'
这给了我一个索引搜索。这让我想到(从我学到的一点点)SQL Server 可能认为扫描比对其余列进行书签查找更快?
编辑 2:
在阅读了这里的引爆点之后:http://www.sqlskills.com/blogs/kimberly/why-arent-those-nonclustered-indexes-being-used/
它说大约 30%。我使用此处的查询来获取表中的总页数:
Determining page count on each SQL table without using DBCC
我得到 49 个已使用和 53 个保留。所以 49 的 30% = 14.7 * 17(每个页面存储这么多)大约是 250 行。但是我的查询只返回 9,所以它离临界点还很远。
【问题讨论】:
标签: sql indexing sql-server-2012 non-clustered-index