主鍵是否必須是數據庫表中的第一個字段?主鍵位置
如果我把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;
主鍵是否必須是數據庫表中的第一個字段?主鍵位置
如果我把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;
我想這將完成以前的答案:
「每個表只能有一個AUTO_INCREMENT列,它必須被索引,並且不能有DEFAULT值。只有當AUTO_INCREMENT列只包含正值時,它才能正常工作。負數被認爲是插入一個非常大的正數,這是爲了避免精度問題當數字從正向「換行」到負時,並且還確保您不會意外地獲得包含0的AUTO_INCREMENT列。
因此,對於表內主鍵的位置沒有限制。
希望得到這個幫助。
使用/將主鍵作爲第一場在數據庫中是通用的慣例,但是如果你定義第二個字段(ID)作爲主鍵也沒關係,它不會讓查詢更慢
就像試圖調整你的想法一樣:主鍵是一個邏輯約束,與性能無關。但是,大多數RDBMS實現一個唯一的索引來執行主鍵約束;此索引可能會影響性能,但您可以使用其他索引來影響查詢。主鍵不需要是自動遞增整數(儘管大多數數據庫都是這樣使用它們的)。 –