Sql server 2012 将聚集索引扫描优化为聚集索引搜索

Sql server 2012 将聚集索引扫描优化为聚集索引搜索,sql-server-2012,Sql Server 2012,有一个场景,我有一个包含40列的表,我必须选择一个表的所有数据(包括所有列)。在从表中获取完整数据集时,我已经在表上创建了一个聚集索引及其包含的聚集索引扫描 我知道,如果没有任何筛选器或联接键,SQL Server将选择聚集索引扫描,而不是聚集索引搜索。但是,我想通过将聚集索引扫描优化为聚集索引搜索来优化执行计划。有什么办法可以做到这一点吗?请分享 以下是执行计划的屏幕截图: 问题/请求中有些地方不太正确,因为您所要求的将表现糟糕。我怀疑这是因为对聚集索引的理解有误 聚集索引(最好称为聚集表)是

有一个场景,我有一个包含40列的表,我必须选择一个表的所有数据(包括所有列)。在从表中获取完整数据集时,我已经在表上创建了一个聚集索引及其包含的聚集索引扫描

我知道,如果没有任何筛选器或联接键,SQL Server将选择聚集索引扫描,而不是聚集索引搜索。但是,我想通过将聚集索引扫描优化为聚集索引搜索来优化执行计划。有什么办法可以做到这一点吗?请分享

以下是执行计划的屏幕截图:

问题/请求中有些地方不太正确,因为您所要求的将表现糟糕。我怀疑这是因为对聚集索引的理解有误

聚集索引(最好称为聚集表)是数据表,它不是与表分开的,而是表。如果表中数据的顺序已经基于项ID,那么扫描是查询的最有效的访问方法(特别是考虑到
select*
)-您根本不想在这种情况下进行搜索-我不相信由于排序运算符,这是您的情况

如果聚集表是基于另一个字段排序的,则需要额外的非聚集索引来提供正确的顺序。然后,您将尝试将非聚集索引扫描、嵌套循环的计划强制到聚集索引搜索。这可以通过使用查询提示来实现,最有可能的是
内部循环联接
会导致查找-但是也存在可以使用的
FORCESEEK


从性能角度看,第二种选择永远不会成功-实际上,您正在寻找一个转折点概念()

为什么?它会像垃圾一样跑。