【发布时间】:2017-02-20 21:11:04
【问题描述】:
我有一个表 ORDER 有 64 列,OrderNo 是主键。它还有两列ParentOrderNo 和Type。对于单独的订单,Type 和 ParentOrderNo 将为 NULL,对于分组订单,Type 将填充“PRNT”或“CHLD”。 OrderNo where Type='PRNT' 将填充到其组中所有订单(PRNT 和 CHLD)的 ParentOrderNo 列。一组可以有 1 个父订单和 2 个或更多子订单。该表具有用于列 ParentOrderNo 和 Type 的非聚集索引 (IX_ORDER_1)。
此表共有 31654 行。在我的测试用例中,有 30001 个订单(1 个父级和 30000 个子级)。
当我执行查询时:
Select top 1 *
From ORDER
where PARENTORDERNO = '11278' and Type ='prnt'
执行计划显示 Index Seek 使用 (IX_ORDER_1)
但是当我执行查询时:
Select top 1 *
From ORDER
where PARENTORDERNO = '11278' and Type ='chld'
执行计划显示Index Scan using clustered index
有人可以指导我是什么导致执行计划发生这种变化。 提前致谢
【问题讨论】:
标签: sql sql-server