2014-06-13 2 views
0

나는 영원히 가져오고있는 가입과 SQL 서버에 쿼리가 있습니다. 속도를 낼 수있는 팁을 누군가가 얻을 수 있기를 바랍니다.Varchar에서 느린 가입

그 문제는 내가있는 문자열 기능을 사용하려고했습니다

'_0070000050'와 같은 값이 Reseller_CSN라는 필드에 가입하고있어 생각합니다 모든 반환에 가입하지만, 예를 들어 '0070000050'을 강조 하지만 결과를 int 또는 bigint로 형 변환하거나 변환하려고 할 때 오류가 계속 발생합니다.

모든 팁 크게 쿼리는 다음과 같습니다, 감사하겠습니다 :

SELECT   
      t1.RESELLER_CSN 
      ,t1.FIRST_YEAR_RENEWAL 
      ,t1.SEAT_SEGMENT 
      ,t2.Target_End_Date_CY 
      ,t2.Target_End_Date_PQ 
      ,t2.Target_End_Date_CY_1 
      ,t2.Target_End_Date_CY_2 
      ,t1.ASSET_SUB_END_DATE 
    FROM dbo.new_all_renewals t1 
    LEFT JOIN dbo.new_all_renewals_vwTable t2 
    ON SUBSTRING(t1.RESELLER_CSN,2,11) = SUBSTRING(t2.RESELLER_CSN,2,11) 
+0

실행 계획을 알려주십시오. 너 봤어? 그것없이 우리는 단지 짐작할 수 있습니다. – Namphibian

+0

하위 문자열이 조인 (join)이라는 것은 매우 나쁜 생각입니다. 그것을 제거. – Namphibian

답변

2

A는 변함없이 원시 컬럼에 가입보다 더 많은 노력이 필요 처리 컬럼에 가입 할 수 있습니다. 이 경우 계산 열을 사용하여 성능을 향상시킬 수 있습니다. 예를 들어, 첫 번째 테이블에, 당신은 할 수 있습니다 :

alter table new_all_renewals add CSN_num as SUBSTRING(t1.RESELLER_CSN,2,11); 
create index on new_all_renewals(CSN_num); 

쿼리를 가속화한다 컬럼에 인덱스를 생성합니다. (참고 : 실제로 함수를 사용하는 대신 계산 열을 참조해야합니다.)

+0

어쩌면 그것을 지속 된 계산 열로 만들까요? 속도 차이가 무엇인지 궁금 해서요. 그것에 대한 아이디어가 있습니까? 계산 된 열은 요청이있을 때 계산됩니다. – Namphibian

+1

이 계산 된 열에는 인덱스가 허용되어야합니다. 여기서 메모리를 새로 고칠 수 있습니다. http://msdn.microsoft.com/en-us/library/ms189292(v=sql.110).aspx. –

+0

재 방문해 주셔서 감사합니다. 고맙다. – Namphibian