2013-06-28 1 views
0

요약하면 bigint 대신 varchar가 약간 성능이 향상됩니다.SQL Server Implicit convert to varchar vs bigint

예를 들어, 내가

항목 아래로이 같은 두 개의 테이블이

ID bigint PK; 
item_code varchar(256); 

SalesItem

ID bigint PK; 
item_id varchar(256); 

item_id 외래 키가 아닌 사실을 양지하시기 바랍니다 특별한 경우로 인해 item_id이 허용됩니다. be varchar(256);

나는 SQL Server를 INT로 VARCHAR로 변환하려고하는 암시 적 변환이 발생하고 성능이 최악이

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = Item.id 

같은 SQL 문을 시도했다.

어떻게 든, 우리는 아래에 SQL을 변경 :

Select SalesItem.item_id 
from SalesItem 
left join Item on SalesItem.item_id = convert(varchar(256), Item.id) 

글쎄에 대한 성능은 70 % -80 %

단지의 골동품 감소, 뛰어난이며 그 문제에 'ON'의 순서 ? 그리고 그것을 변환해야합니까?

varchar(256)으로 변환하는 대신 item.idbigint을 입력하면 salesitem.item_id으로 변환 하시겠습니까? 예를 들어

:

Select SalesItem.item_id 
from SalesItem 
left join Item on Item.id = convert(bigint, SalesItem.item_id) 

SQL 위에 그냥 샘플 떨어져 있다는 사실을 양지하시기 바랍니다.

+0

저는 이것이 이전처럼 성능 문제를 직접 경험해보아야 할 것입니다. 차이를 확인하는 데 필요한 모든 테이블과 충분한 데이터가 있습니다. 이전처럼 (Varchar로 변경) 이제 bigint로 변경하고 볼 수 있습니다. 그리고 조인 열에 대한 색인 생성과 관련하여 다른 점도 고려하십시오. –

+0

@ N.p Subedi Ya, 조언 해 주셔서 감사합니다. 나는 주 테이블로의 변환이 3 분에서 몇 초까지 훨씬 더 빠름을 테스트했다. 올바른 SQL은 [SalesItem에서 salesitem.item_id를 선택하면 Item.id = join (convert (bigint, Salesitem.item_id)) 항목에 대신 변환 될 것이다. item.id를 varchar (256)로 변환하면 salesitem.item_id를 bigint로 변환하는 것이 훨씬 빠릅니다. – Worgon

답변

1

일반적으로 두 숫자를 비교하면 두 문자열을 비교하는 것보다 효과적입니다.

귀하의 경우, SalesItem.item_id를 bigint로 변환 할 때 select가 실패 할 수도있는 약간의 가능성이 있다고 말하면, 처음에는 varchar로 저장되어 있으므로 일부 문자도 포함될 수 있습니다. 정수로 변환 할 수 없습니다.

+0

테스트를 거쳤습니다. big int로 변환하면 확실히 빠릅니다. – Worgon