SQL Server 2008 R2 데이터베이스에는 국가가 포함 된 COUNTRIES
참조 테이블이 있습니다.PRIMARY KEY를 NVARCHAR 유형에서 INT 유형으로 전환해야합니까?
create table COUNTRIES(
COUNTRY_ID nvarchar(50) PRIMARY KEY,
... other columns
)
기본 키이 표는 최대 포함 등 'FR', 'GER', '미국', '영국'과 같은 값을 포함하십시오 PRIMARY KEY
은 NVARCHAR 열입니다. 20 행.
create table SALES(
ID int PRIMARY KEY
COUNTRY_ID nvarchar(50),
PRODUCT_ID int,
DATE datetime,
UNITS decimal(18,2)
... other columns
)
이 판매 테이블도 유형 nvarchar
의, COUNTRY_ID
라는 이름의 열을 포함 (안 기본 키) :
우리는 또한 SALES
테이블에 포함 된 판매 데이터가 있습니다. 이 테이블은 훨씬 크며 약 2,000 만 개의 행을 포함합니다.
SALES
테이블에서 쿼리 할 때 우리는 거의 언제든지 COUNTRY_ID
에서 필터링합니다. 이와 같이 심지어 대부분의 집계 쿼리를 수행하는 데 너무 오래 걸린다. (적절한 인덱스가 있더라도)
SALES
테이블의 쿼리 성능을 향상시키기 위해 개발 단계에 있습니다. 내 질문 :
에서 int
으로 COUNTRY_ID
유형을 전환 할 가치가 있습니까?COUNTRY_ID
열이 두 테이블에서 모두 int
유형으로 변환되는 경우 두 테이블을 조인 할 때 더 나은 성능을 기대할 수 있습니까?
전위 [중복 (http://stackoverflow.com/questions/332300/is-there-을 사용하여 환원되어 있는지 확인할 수 a-real-performance-difference-int-and-varchar-primary-keys)를 사용합니다. – Scott
@Scott - 이벤트가 거의 같은 경우, 질문은 SQL Server가 아니라 MySQL을 참조합니다. 거기에있는 몇 가지 대답이 필자의 경우와 일치 할 수 있지만 SQL Server에 대한 기술적 인 대답 (일부 경우도 있음)을 얻고 자합니다. 너희들이 내 질문을 닫지 않기를 바란다. – Lucian
조인이있을 때 int가 더 빨라지 겠지만, 다른 한편으로는 의미 론적 기본 키를 가짐으로써 종종 국가 테이블에 가입 할 필요가 없다는 것을 의미 할 수도있다. 외래 키에 직접 필터링하십시오. – alun