2012-07-05 198 views
1

可以優化此查詢嗎?優化SQL Server查詢

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'; 

回答

1
  1. tr.refno創建索引,並與tr.refno LIKE '89%'
  2. 更換LEFT(tr.refno,2) = 89創建綜合指數stk.id + stk.stockno
  3. 確保br.id由指數
  4. 覆蓋。如果真的有大量的記錄(億萬)和這個查詢如果經常執行 - 可能是有意義的存儲最後7 tr.refno字符在單獨的字段,以避免RIGHT(tr.refno,7) = 'ST00576'(不知道是否SQL Server支持反向索引)
+0

點4沒有任何意義 - 在RIGHT(tr.refno,7)上設置索引。 – TomTom

+0

你會怎麼做呢? –

+0

@TomTom:以及單個基於函數的索引如何提供幫助?如果我們分離了列 - 我們可以創建'right_part_column + refno'組合索引。 – zerkms