2013-09-24 2 views
1

기본 키 길이가 성능에 별다른 영향을 미치지 않는지 궁금합니다. 예를 들어, 다음 테이블 정의를 고려하십시오.테이블 기본 키 길이

CREATE TABLE table1 (
    id   VARCHAR(50) PRIMARY KEY, 
    first_column VARCHAR(50) NULL, 
    second_column VARCHAR(75) NOT NULL 
); 


CREATE TABLE table2(
    id   VARCHAR(250) PRIMARY KEY, 
    first_column VARCHAR(50) NULL, 
    second_column VARCHAR(75) NOT NULL 
); 

table1이 table2보다 성능이 우수합니까?

+2

특정 DBMS? 또한 50 자 길이의 식별자로 무엇을 사용하고 있습니까? –

+0

나는 특별한 DBMS를 의미하지 않는다. 그러나 특정 DBMS에 대한 귀하의 통찰력에 감사드립니다. 그리고 길이에 대한 우려로 비즈니스 세계에서 그런 경우가 발생하고 있습니다. – habanoz

답변

0

예 varchar (50)를 사용하는 기본 키가 더 효율적입니다. 기본 키가 Clustered Index를 보유하고 있음을 알고 있으므로 새 레코드가 테이블에 입력 되 자마자 값은 내부적으로 클러스터 된 인덱스로 정렬됩니다. 수십억 개의 레코드에서이 차이를 볼 수 있습니다. 그래서 일반적으로 자연 기본 키를 갖도록 권고됩니다. ID와 비슷합니다.

+0

Ashutosh, 반드시 기본 키가 "클러스터 된"경우는 아닙니다. SQL Server와 DB2에서 적절한 열 집합으로 클러스터링 할 수 있습니다. Oracle과 MySql은 일반적으로 IOT와 클러스터 키에 각각 기본 키를 사용합니다. 모든 경우에 varchar 열의 선언 된 크기는 중요하지 않다고 생각합니다. 데이터의 크기는 중요합니다. – sqlvogel

2

일반적으로 성능은 varchar 열의 길이보다 저장되는 대상에 따라 다릅니다. varchar (50) 및 varchar (250) 열의 중간 길이가 40자인 경우 비슷한 성능을 보입니다.

일부 dbms에서 기본 키는 기본적으로 클러스터 된 키이기도합니다. 그러나 기본 키가 클러스터 된 키로 적합하지 않은 경우 일 수 있으며은 클러스터 된 키를 사용하지 않도록 dbms에 알릴 수 있습니다.

+0

기본 키의 클러스터 된 인덱스가 선택 사항 인 데이터베이스를 지정할 수 있습니까? –

+0

더 짧은 본성은 더 좋은 본능입니다. 왜 짧은 인덱스가 더 좋은 실적을 낼지 설명 할 수 있습니까? – habanoz

+0

클러스터 된 인덱스는 SQL Server, DB2 및 Sybase ASE에서 선택 또는 존재하지 않습니다. PostgreSQL은 실제로 그것들을 가지고 있지 않습니다. 당신은 어떤 인덱스 (나는 생각)에 따라 테이블을 클러스터링 할 수 있지만 PostgreSQL은 새로운 행에 대한 클러스터링을 유지하지 않습니다. 오라클은 클러스터 된 인덱스 대신 인덱스로 구성된 테이블을 가지고 있다고 생각합니다. 그들은 선택 사항입니다. 나는 다른 사람들이있을 것이라고 확신한다. –