1

このクエリを最適化することは可能ですか?

SELECT 
    tr.transferfrom, tr.transferto, br.id as 'BR_ID',tr.refno, 
    br.name as 'BR_NAME', br.code as 'BRANCH_CODE', tr.docno, tr.transdate,
    stk.stockno,stk.salescat,tr.qty, tr.sprice,tr.qty*tr.sprice as 'GROSS_SALES' 
FROM 
    TRANSFER tr 
JOIN 
    branch br on tr.branchid = br.id 
JOIN 
    stocks stk on tr.stockid=stk.id 
WHERE 
    RIGHT(tr.refno,7) = 'ST00576' AND LEFT(tr.refno,2) = 89 
    AND stk.stockno = 'NS4370 CR - L'; 
4

1 に答える 1

1
  1. のインデックスを作成してtr.refno置換LEFT(tr.refno,2) = 89tr.refno LIKE '89%'
  2. 複合インデックスの作成stk.id + stk.stockno
  3. br.idインデックスでカバーされていることを確認してください
  4. tr.refno本当に多くのレコード (数億) があり、このクエリが頻繁に実行される場合、最後の 7文字を別のフィールドに格納して回避することが理にかなっている可能性がありますRIGHT(tr.refno,7) = 'ST00576'(SQL サーバーが逆インデックスをサポートしているかどうかは不明です)。
于 2012-07-05T05:02:12.917 に答える