2

「IN」と「OPERATOR <」を組み合わせると、「IN」句のみよりも優れた結果が得られるのはなぜですか?

何百万ものレコードを含む動きのテー​​ブルがあります。「IN」句だけでクエリを実行すると、完了するまでに数分かかります。しかし、「AND Product_ID < 400000」を追加すると、数秒しかかかり

ませんなぜこれが起こるのか説明できますか?

(Product_ID にはインデックスがあり、最大の ID 番号は 390000 未満です)

スローコード:

SELECT 
   Product_ID,
   Product_Name,
   Product_Cost
FROM Products
WHERE Product_ID IN (1,10,100,1000)
UNION
SELECT 
   Product_ID,
   Product_Name,
   Product_Cost
FROM Products_Hist
WHERE Product_ID IN (1,10,100,1000)

ファーストコード:

SELECT 
   Product_ID,
   Product_Name,
   Product_Cost
FROM Products
WHERE Product_ID IN (1,10,100,1000)
      AND Product_ID < 400000
UNION
SELECT 
   Product_ID,
   Product_Name,
   Product_Cost
FROM Products_Hist
WHERE Product_ID IN (1,10,100,1000)
     AND Product_ID < 400000
4

1 に答える 1

0

時間の違いは、フル テーブル スキャンとインデックス レンジ スキャンにあります。インデックスを使用すると、最初に多数の候補が削除されてから、IN 計算が適用されて結果がフィルター処理されます。

tkprof のようなプロファイラーの使用について知っていますか? またはEXPLAIN PLAN?これらは、クエリがうまく実行される可能性が高いかどうかを事前に教えてくれます。

クエリごとに 1 つずつ、2 つの EXPLAIN PLAN 実行を作成して、何が起こっているかを確認します。その方法がわからない場合は、私たちがお手伝いします。

于 2013-10-21T23:44:30.293 に答える