1
SELECT TOP 10 dic.item_cd,
              dic.item_knm,
              dic.item_enm
FROM tbus.dt_item_com dic
INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId
INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType
WHERE (dic.item_knm LIKE '%%'
  OR (dic.item_enm LIKE '%%')
  AND (dic.item_cd NOT IN
         (SELECT TOP 0 dic.item_cd
          FROM tbus.dt_item_com dic
          INNER JOIN tbus.mfProd mfp ON dic.item_cd LIKE mfp.prodId
          INNER JOIN tbus.plu_category plc ON mfp.prodType LIKE plc.plc_prodType
          WHERE (dic.item_knm LIKE '%%'
                 OR dic.item_enm LIKE '%%')
          ORDER BY dic.item_cd DESC))
ORDER BY dic.item_cd DESC

これは、最適化しようとしている SQL クエリです。

このクエリが行うことは、項目名による 3 つのテーブルの内部結合です (現在は単に '%%' です。後で '%apple%' のようになります)。そして、これはページング用であるため、そこにも NOT IN 構文があります。

ここでの問題は、INNER JOIN & WHERE 句が 2 つ重複していることです。1 つは NOT IN の内側にあり、もう 1 つは外側にあります。この重複したコードを削除して高速化するにはどうすればよいですか :( ?

(これは SQL Server 2000 に基づいています)

4

1 に答える 1

1

別の質問に答えさせてください (コメントに従って): SQL Server でページングを行う方法は? 通常、row-Number 関数を使用します。

select * from (
 select *, row_number() over(order by something) r
 from T
) x
where r >= 10 and r < 20

その後、すべての問題が解消されます。

于 2013-03-18T20:02:13.657 に答える