日期:2014-05-19  浏览次数:20550 次

谁能解释下?为什么非聚集索引成为精确匹配查询的最佳方法???
在搜索数据值时,先对非聚集索引进行搜索,找到数据值在表中的位置,然后从该位置直接检索数据。这使非聚集索引成为精确匹配查询的最佳方法,因为索引包含描述查询所搜索的数据值在表中的精确位置的条目。如果基础表使用聚集索引排序,则该位置为聚集键值;否则,该位置为包含行的文件号、页号和槽号的行   ID   (RID)。
-----------------------
以上是   SQL   Server   的帮助上的一段话

我就想知道中间那句“这使非聚集索引成为精确匹配查询的最佳方法”
为什么非聚集索引成为精确匹配查询的最佳方法???

还有第一句,查询数据时,非聚集索引先于聚集索引查询?

------解决方案--------------------
SQL Server 的帮助上的那段话不是说得很清楚吗

用非聚集索引查询,通过索引得到的是行的文件号、页号和槽号的行 ID (RID),需要再通过这些信息再次查找数据行的物理位置,而聚集索引直接得到聚集键值,也就是物理位置,直接就可以去取数据行了。



------解决方案--------------------

1、“这使非聚集索引成为精确匹配查询的最佳方法”并不是相对于“聚集索引”来说的。
只是说,在做精确匹配查询时,如果作为条件的列上有索引的话,会比没有索引要好。通过索引可以快速的定位到要查询的行在表中的位置!
索引只有“聚集”和“非聚集”之分,并不是说“非聚集”比“聚集”快。相反,“聚集索引”是最快的,如果表有“聚集索引”,那么“非聚集索引”还是要通过“聚集索引”来找到相应的记录!
我的理解是这样的。

2、非聚集索引先于聚集索引查询?
不是的!在一个列上,如果既有“聚集”,又有“非聚集”,那么“聚集”优先!
这个可以自己动手做个测试。
CREATE TABLE TEST(a int primary key)

CREATE NONClUSTERED INDEX inx_Test ON TEST(a)

SELECT * FROM TEST WHERE a = 1 --查看这句的执行计划!

DROP TABLE TEST