基本上,我有一个临时表,我使用不同的技术用相同的数据填充表,以便在我的情况下找到最快的一个。这三种方法是:
- 使用连接选择插入的信息
- 选择插入的信息,其中大部分表格/逻辑/计算都包含在内联函数中
- 选择插入的信息,其中大多数表/逻辑/计算都包含在表值函数中
使用每种方法,表格都填充了相同的数据,并且我使用表格值函数获得了最佳性能。但是这里的事情变得奇怪了。
填充临时表后,对其进行简单的 SELECT,并在所有列上使用 GROUP BY 和 ORDER BY。因为数据是相同的,所以我期望相同的执行计划,但我得到了这个:
其中第一行是表值函数的执行计划,第二行是第一种和第二种方法的执行计划。
为什么我对具有相同数据的表有两个不同的执行计划?为什么不总是使用第一个,因为它比第二个更快?
请注意,由于这与排序和分组的数据有关,我假设当我使用表值函数时,日期可能已经排序,但简单选择结果显示数据在每个中都以相同的方式排序案子。