0

次のシナリオがあります。

TableA (ID GUID, Type INT) : +60M rows
TableB (ID GUID) : +5M rows

TableA には ID のインデックスがあり、Type TableB の主キーは ID です

次のクエリを改善する必要があります。

SELECT * FROM TableA A
INNER JOIN TableB B
   ON A.ID = B.ID AND A.Type = 5

クエリが完了するまでに約 30 秒かかります。

Type列でTableAを分割しようとしましたが、クエリの実行時間は変わりません。実行計画も同じです。私が理解している限り、テーブルを分割するとパフォーマンスが大幅に向上するはずですか?

パーティションを使用してパフォーマンスを向上させるためにクエリを調整する必要がありますか? 私のインデックスは間違っていますか?

前もって感謝します!

4

1 に答える 1

2

あなたは、パーティショニングを押すとパフォーマンスが向上する魔法のスイッチだと考えている人の 1 人です。パーティショニングは主にパフォーマンスを低下させますが、いくつかの狭いケースでは役立ちます。これは主に、一括読み込みとデータのアーカイブ/削除のための管理機能です。

パーティショニングは深刻な結果を招き、適切な理解、計画、およびテストなしでは実行できません。

適切なインデックスを作成します(あなたの場合A(Type, ID)は良いスタートです。代わりA(ID) WHERE Type = 5に(フィルタリングされたインデックス))。

于 2013-02-21T12:33:40.943 に答える