因此,在SQL Server中,我有一个表示账簿记录的表。类似的东西
No title type publisher etc...
------------------------------------------------------
118 'Book Title' book 'publisher_1'
119 'Title' book 'publisher_1'
120 'Title but longer' ebook 'publisher_1'
121 'Book Title I like' book 'publisher_1'
122 'Title' ebook 'publisher_1'
我在第0列有预制的聚集索引,并在"标题"列上创建了索引。
这是我想要测试的一个(无论它是否有助于查询(。
因此,当我运行以下查询时,会发生以下情况:
- 当我想选择"标题"并使用条件
where title LIKE %Title%
进行搜索时,它会使用和index scan
进行搜索(看起来不错( - 当我想选择标题和材料并使用条件
where title = 'Title'
进行搜索时,它会使用index seek
进行搜索(这里都很好( - 当我想选择标题和材料并使用条件
where title LIKE 'Title%
进行搜索时,它会使用clustered index scan
进行搜索
最后一个我不明白它为什么选择clustered index scan
还有为什么它在第一个中选择index seek
,因为我读到索引在的开头和结尾都不能使用通配符
如有任何帮助,我们将不胜感激。
使用通配符意味着使用"不等式"比较。这种比较意味着对索引进行扫描。
非聚集索引更适合进行相等(精确(比较。然后,您可以在执行计划中获得索引查找。
您应该明确地将列"Title"添加到聚集索引中。在你的执行计划中,你应该注意到一些改进,尽管你可能还有索引扫描。聚类索引(单段表(更有效地进行不等式比较(范围比较或通配符比较(
sql引擎可能更喜欢聚集索引扫描,而存在非聚集索引,因为它认为它更高效。