【发布时间】:2012-09-24 15:51:41
【问题描述】:
我很难弄清楚为什么在一种情况下强制执行特定的执行计划,而不是在另一种情况下。示例:
select min(COLUMN) from TABLE where FK_COLUMN = 1;
对比
select min(COLUMN) from TABLE where FK_COLUMN = 1 group by FK_COLUMN;
第一个生成带有索引扫描的执行计划,而第二个扫描被替换为查找。进一步增加我的困惑的是,这不会发生在表格的每一列上 - 对于某些列,我不需要 group by 来生成搜索。我还注意到,缓慢的情况只发生在某些外键值上——那些只返回没有行的值,但不是所有没有返回行的值都会产生不利的计划。什么给了?
【问题讨论】:
-
什么索引在你的桌子上?
-
主键上的单个聚集索引。
-
请提供更详细的信息(列 - 索引)。多少索引
-
选择的计划取决于很多东西:索引、缓存、统计、数据的传播等。我早就放弃了尝试第二次猜测优化器 - 我只是选择它!
标签: sql indexing group-by aggregate sql-execution-plan