基本的に、一時テーブルがあり、私の場合は最速のものを見つけるために、さまざまな手法を使用して同じデータをテーブルに入力しています。3 つの方法は次のとおりです。
- 結合を使用して挿入された情報を選択する
- ほとんどのテーブル/ロジック/計算がインライン関数に含まれている挿入された情報を選択します
- ほとんどのテーブル/ロジック/計算がテーブル値関数に含まれている挿入された情報を選択します
各方法でテーブルに同じデータが入力され、テーブル値関数を使用して最高のパフォーマンスが得られます。しかし、ここで事態は奇妙になります。
一時テーブルが作成された後、すべての列で GROUP BY と ORDER BY を使用して単純な SELECT が実行されます。データが同じであるため、同じ実行計画を期待していましたが、次のようになります。
最初の行はテーブル値関数の実行計画で、2 番目の行は最初と 2 番目のメソッドの実行計画です。
同じデータを持つテーブルに対して 2 つの異なる実行プランがあるのはなぜですか? 2 番目のものよりも高速であるため、最初のものを常に使用するとは限らないのはなぜですか?
これはデータの並べ替えとグループ化に関連しているため、テーブル値関数を使用すると日付が既に並べ替えられている可能性があると思いましたが、結果を単純に選択すると、データがそれぞれ同じ方法で並べ替えられていることがわかります場合。