当我使用时,我很想知道:
select *
from table_name
where Id = 2013
SQL Server 2008在内部使用什么类型的搜索来获取行?
答案 0 :(得分:5)
取决于Id
是否被编入索引,如果是,索引是否包含(覆盖)所有列。
通常,名为id
的列将成为主键,并且(默认情况下)为聚簇索引键。如果是这种情况,那么您可能会获得聚集索引搜索。
SQL Server索引为B+ trees。
SQL Server将从索引根页面开始,然后按下它以找到该行。在这种情况下读取的页数将是索引的深度。
如果不存在合适的索引,则SQL Server将需要读取表中的每个页面。
最后还有一种可能性是id
被编入索引,但索引并未涵盖表中的所有列。在这种情况下,您可能会看到一个带有索引搜索的计划,然后是书签/键查找,以检索SELECT *
所需的缺失列值。