2012-07-05 3 views
1

이 쿼리를 최적화 할 수 있습니까?SQL 서버 쿼리

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. stk.id + stk.stockno
  2. 기록이 많이 정말 수백만의 (수백이있는 경우 br.id가 인덱스
  3. 에 포함되어 있는지 확인 만들기 종합 지수를 tr.refno에 대한 인덱스를 생성하고 tr.refno LIKE '89%'
  4. LEFT(tr.refno,2) = 89 교체) 및이 쿼리가 자주 수행되는 경우 - 문자를 별도의 필드에 저장하여 RIGHT(tr.refno,7) = 'ST00576'을 피할 수 있습니다 (SQL Server 역방향 인덱스 지원)
+0

포인트 4는 의미가 없습니다. 대신 RIGHT (tr.refno, 7)에 인덱스를 설정하십시오. – TomTom

+0

어떻게 그렇게 할 수 있겠습니까? –

+0

@TomTom : 단일 기능 기반 색인이 어떻게 도움이 될까요? 우리가 칼럼을 분리했다면'right_part_column + refno' 합성 색인을 만들 수 있습니다. – zerkms