优化SQL Server查询

时间:2012-07-05 01:38:12

标签: 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 个答案:

答案 0 :(得分:1)

  1. tr.refno创建索引,并将LEFT(tr.refno,2) = 89替换为tr.refno LIKE '89%'
  2. 创建综合索引stk.id + stk.stockno
  3. 确保索引
  4. 涵盖br.id
  5. 如果确实存在大量记录(数亿)并且此查询经常执行 - 可能将最后7个tr.refno字符存储在单独的字段中以避免RIGHT(tr.refno,7) = 'ST00576'(不是确定sql server是否支持反向索引)