2009-08-25 6 views
3

私は2つのテンポラリテーブル#temp1と#tempを持っています。両方ともキーと日付の列があります。どちらも約25k行あります。そして、私はすべての行でユニークなキーと日付に基づいてそれらに参加させています。この結合が完了するまでに約4分かかります。速度を上げる方法や代替方法はありますか?SQL Serverでのテンポラリテーブルジョインの高速化

+0

私たちがプレイできる再現スクリプトを投稿できますか? –

答えて

6

他のテーブルと同様に、一時テーブルにインデックスを作成できると思います。

+0

私は間違いなくそれを試すことができました –

+0

これは良い考えです - あなたの一時テーブルに主キーを指定するだけでなく、。 – pjp

+0

インデックスを25kに設定するとパフォーマンスが向上するかどうかはわかりません。 SQL Serverがインデックスを使い始める前に、スレッショルドがあるように思えます。それ以外の場合は、毎回トラバースおよび索引付けよりも速いため、表スキャンになります。私は2つをベンチマークします。 – uriDium

1

私はあなたの質問全体が見たいかもしれないという疑いがあります。この特定のウサギに肌をさらす別の方法があるかもしれません。

詳細を残していただけますか?

+0

私は自分のクエリ作成スキルで知られていません。しかし、その索引付けのアドバイスはうまくいっているようです。 1つの一時テーブルの結合列にクラスタード・インデックスを作成し、その結果をすぐに返すようになりました。 –

1

あなたはおそらく、テンポラリテーブルを完全に避けて、セットベースのソリューションを用意することができます(これはもっと速く、より優れたスケーラビリティを実現します)。しかし、それはあなたのクエリです。

3

25kテーブルの参加に4分かかる場合は、問題があります。

おそらく間違ったJOINの状態がデカルト結合(またはそれに近いもの)になり、その結果、25k * 25k = 625Mレコードが返されます。

これ以上の場合は4分となることがありますが、それはあなたの望むものではないと思います。

おそらくDISTINCT/GROUP BY句がクエリに含まれているため、正しい結果セットが返されるようになりますが、最適ではありません。

正確な理由がわかるようにクエリを投稿してください。