【发布时间】:2010-12-11 02:48:06
【问题描述】:
谷歌搜索后,我知道索引搜索比扫描更好。
我如何编写将产生寻找而不是扫描的查询。我试图在谷歌中找到这个,但到目前为止还没有运气。
任何带有解释的简单示例将不胜感激。
谢谢
【问题讨论】:
标签: sql sql-server tsql
谷歌搜索后,我知道索引搜索比扫描更好。
我如何编写将产生寻找而不是扫描的查询。我试图在谷歌中找到这个,但到目前为止还没有运气。
任何带有解释的简单示例将不胜感激。
谢谢
【问题讨论】:
标签: sql sql-server tsql
索引查找是指 SQL Server 可以使用binary search 快速查找行。索引中的行按特定顺序排序,您的查询必须在 WHERE 子句中指定足够的信息以允许 SQL Server 使用排序索引。
索引扫描是指 SQL Server 无法使用索引的排序顺序,但仍可以使用索引本身。如果表行非常大,但索引相对较小,这是有道理的。 SQL Server 只需从磁盘读取较小的索引。
举个简单的例子,以电话簿表为例:
id int identity primary key
lastname varchar(50)
phonenumber varchar(15)
假设 (lastname) 上有一个索引。然后这个查询将导致 index seek:
select * from phonebook where lastname = 'leno'
此查询将导致索引扫描:
select * from phonebook where lastname like '%no'
与现实生活中的电话簿类似,您无法查找姓名以“no”结尾的人。您必须浏览整个电话簿。
【讨论】:
索引是一种数据结构,可提高对数据库表的数据检索操作的速度。当为表定义主键时,大多数 dbs 会自动创建索引。 SQL Server 为主键(复合或其他)创建一个索引作为“聚集索引”,但它必须是主键 - 它可以是其他列。
注意:
相关阅读:
【讨论】:
扩展 rexem 的反馈:
pkeys 的聚集索引想法不是任意的。将 pkey 聚集在一起只是默认设置。集群意味着值将在 Sql Server 8k 页面上物理上彼此靠近放置,因此假设如果您通过 pkey 获取一个值,您可能会对它的邻居感兴趣。我认为对 pkeys 这样做不是一个好主意,因为它们通常是唯一但任意的标识符。更好地聚集在更有用的数据上。顺便说一句,每个表有一个聚集索引。
简而言之:如果您可以在聚集索引列上过滤查询(这是有道理的),那就更好了。
【讨论】: