谷歌搜索后,我发现索引搜索比扫描更好。
如何编写将导致搜索而不是扫描的查询。我试图在谷歌找到这个,但截至目前没有运气。
任何有解释的简单例子都将受到赞赏。
由于
答案 0 :(得分:6)
索引是一种数据结构,可提高数据库表上数据检索操作的速度。大多数dbs在为表定义主键时自动创建索引。 SQL Server将主键(复合或其他)的索引创建为“聚簇索引”,但它不将作为主键 - 它可以是其他列。
注:
相关阅读:
答案 1 :(得分:3)
扩展rexem的反馈意见:
pkeys的聚集索引理念不是任意的。它只是默认使pkey聚集。并且群集意味着值将在Sql Server 8k页面上物理地放置在彼此附近,因此假设如果您通过pkey获取一个值,您可能会对其邻居感兴趣。我不认为对pkeys这样做是个好主意,因为它们通常是唯一的但是任意标识符。最好聚集更有用的数据。每个表btw一个聚簇索引。
简而言之:如果您可以在聚簇索引列上过滤查询(这是有意义的),那就更好了。
答案 2 :(得分:1)
索引搜索是指SQL Server可以使用binary search快速查找行。索引中的行按特定顺序排序,您的查询必须在WHERE子句中指定足够的信息,以允许SQL Server使用排序的索引。
索引扫描是指SQL Server无法使用索引的排序顺序,但仍可以使用索引本身。如果表行非常大,但索引相对较小,则这是有意义的。 SQL Server只需从磁盘读取较小的索引。
举个简单的例子,拿一个电话簿表:
id int identity primary key
lastname varchar(50)
phonenumber varchar(15)
假设(姓氏)上有索引。然后,此查询将导致索引搜索:
select * from phonebook where lastname = 'leno'
此查询将导致索引扫描:
select * from phonebook where lastname like '%no'
与现实生活中的电话簿类比,你不能找到名字以“否”结尾的人。你必须浏览整个电话簿。