0

TA2 つの列C1&を持つテーブルがありますC2。TA には 1 億以上の行があります。DISTINCTで行をフェッチするクエリを実行しますC1 WHERE LEFT(C2, 5) = 'XXXXX'。パフォーマンスの問題に直面しています。個別のデータを取得するのに数秒かかります。

このクエリのパフォーマンスを向上させるにはどうすればよいですか?

4

3 に答える 3

2

テーブルに新しいテキスト列を追加しUPDATE、結果をその列に入れるクエリを実行しLEFT(C2, 5)ます。列にインデックスを付け、新しいクエリを実行しますWHERE new_column = 'XXXXX'

于 2012-08-22T01:01:21.080 に答える
2

一般に、WHERE 句で文字列関数を使用することは望ましくありません。

C2 がインデックス化されているかどうかは言及しません。少なくともインデックスが作成されている場合は、条件に一致するかどうかを確認するために、テーブル内のすべての行を読み取る (スキャン) 必要なく、インデックスに対して関数を適用できます。

于 2012-08-22T01:08:18.767 に答える
1

持っている列にインデックスを付けて、次のようなことを試みることもできます。

where c2 >= 'XXXXX' and
      c2 < 'XXXXY'

または:

where c2 >= 'XXXXX' and
      c2 <= 'XXXXXZ'

アイデアは、クエリを列の関数から範囲に切り替えることです。インデックスがある場合、範囲フィルターは列のインデックスを使用できます。

于 2012-08-22T02:09:15.900 に答える