繁体   English   中英

在SQL Server中搜索和扫描

[英]Seek & Scan in SQL Server

谷歌搜索后,我发现索引搜索比扫描更好。

如何编写将导致搜索而不是扫描的查询。 我试图在谷歌找到这个,但截至目前没有运气。

任何有解释的简单例子都将受到赞赏。

谢谢

  1. 按主键列搜索
  2. 按列搜索带有索引的列

索引是一种数据结构,可提高数据库表上数据检索操作的速度。 大多数dbs在为表定义主键时自动创建索引。 SQL Server创建的主键(复合或以其他方式)为“聚集索引”的指标,但它并不必须是主键-它可以是其他列。

注意:

  • LIKE'%'+条件+'%' 不会使用索引; LIKE标准+'%'

相关阅读:

扩展rexem的反馈:

pkeys的聚集索引思想不是任意的。 它只是默认使pkey聚集。 并且群集意味着值将在Sql Server 8k页面上物理地放置在彼此附近,因此假设如果您通过pkey获取一个值,您可能会对其邻居感兴趣。 我不认为对pkeys这样做是个好主意,因为它们通常是唯一的但是任意标识符。 最好聚集更有用的数据。 每个表btw一个聚簇索引。

简而言之:如果您可以在聚簇索引列上过滤查询(这是有意义的),那就更好了。

索引搜索是指SQL Server可以使用二进制搜索来快速查找行。 索引中的行按特定顺序排序,您的查询必须在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'

与现实生活中的电话簿类比,你不能找到名字以“否”结尾的人。 你必须浏览整个电话簿。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM