2013-09-24 77 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)的主鍵會更有效率。就像你知道主鍵持有集羣索引一樣,並且只要在表中輸入新記錄,該值就會在集羣索引內部排列。您將在數十億條記錄中看到這種差異。所以它通常建議有一個自然的主鍵。像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不維護新行的聚簇。我認爲Oracle具有索引組織的表格而不是聚簇索引;他們是可選的。我確定還有其他人。 –