2011-12-04 72 views
4

主鍵是否必須是數據庫表中的第一個字段?主鍵位置

如果我把id放在名字後面,查詢速度會慢一些嗎?

CREATE TABLE users 
(
    name TEXT NOT NULL, 
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    site INTEGER NOT NULL, 
    ... 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

就像試圖調整你的想法一樣:主鍵是一個邏輯約束,與性能無關。但是,大多數RDBMS實現一個唯一的索引來執行主鍵約束;此索引可能會影響性能,但您可以使用其他索引來影響查詢。主鍵不需要是自動遞增整數(儘管大多數數據庫都是這樣使用它們的)。 –

回答

2

我想這將完成以前的答案:

「每個表只能有一個AUTO_INCREMENT列,它必須被索引,並且不能有DEFAULT值。只有當AUTO_INCREMENT列只包含正值時,它才能正常工作。負數被認爲是插入一個非常大的正數,這是爲了避免精度問題當數字從正向「換行」到負時,並且還確保您不會意外地獲得包含0的AUTO_INCREMENT列。

因此,對於表內主鍵的位置沒有限制。

希望得到這個幫助。

4

使用/將主鍵作爲第一場在數據庫中是通用的慣例,但是如果你定義第二個字段(ID)作爲主鍵也沒關係,它不會讓查詢更慢