Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing 显示已分区聚集索引上缺少非聚集索引的执行计划_Indexing_Sql Server 2016_Table Partitioning - Fatal编程技术网

Indexing 显示已分区聚集索引上缺少非聚集索引的执行计划

Indexing 显示已分区聚集索引上缺少非聚集索引的执行计划,indexing,sql-server-2016,table-partitioning,Indexing,Sql Server 2016,Table Partitioning,我们有一个查询,其中表是在列Adate上分区的 行数:565943,分区方案-年,分区数-300 聚集索引列:empid,Adate 查询: select top 1 Adate from emp where empid = 134556 and Adate <= {ts '7485-09-01 00:00:00.0'} order by Adate desc 选择前1名 来自emp 其中EMPID=134556和ADAT< < >考虑如下: 您在(empid,adate) 聚集索引包

我们有一个查询,其中表是在列
Adate
上分区的

行数:565943,分区方案-年,分区数-300

聚集索引列:
empid,Adate

查询:

select top 1 Adate
from emp
where empid = 134556 and Adate <= {ts '7485-09-01 00:00:00.0'}
order by Adate desc
选择前1名
来自emp
其中EMPID=134556和ADAT< < >考虑如下:

  • 您在
    (empid,adate)
  • 聚集索引包含整个数据,例如,聚集索引的叶级页面包含整个数据记录(表中的所有列)
如果您正在搜索并且查询使用聚集索引,那么它可能仍然需要加载比实际需要多得多的数据。。。。整个记录,与找到标准的次数相同

如果您在
(empid,Adate)
上有一个非聚集索引,并且您的查询实际上只需要
Adate
(在其
选择
列列表中),那么该索引将小得多-它只包含这两列(没有任何其他列的开销,当前查询不需要这些列)。因此,与聚集索引相比,扫描此索引或加载这些索引页将加载更少的数据


从这个角度来看,是的,即使在构成聚集索引的相同列上有一个非聚集索引,也会对某些查询场景有益-这可能是SQL Server查询优化器在这里选择的。

表上的当前索引是什么?只有一个索引聚集在empid、AdateHow上表中还有许多其他列?表是如何划分的?总共有5列,表在日期上按范围划分谢谢Marc!非常感谢。@AkashPatwal:如果你觉得这个答案帮助你解决了问题,那么请。这将表示你对那些花自己时间帮助你的人的感谢。