幕布斯7119047
2019-11-17 16:12:05
INT和VARCHAR主鍵之間是否存在真正的性能差異?使用INT與VARCHAR作為MySQL中的主鍵之間是否存在可衡量的性能差異?我想使用VARCHAR作為參考列表的主鍵(想想美國,國家代碼),并且同事不會將INT AUTO_INCREMENT作為所有表的主鍵。我的論點,詳見這里,是INT和VARCHAR之間的性能差異可以忽略不計,因為每個INT外鍵引用將需要一個JOIN,使參考的意義上說,VARCHAR鍵則直接呈現(xiàn)的信息。那么,有沒有人有這個特定用例的經(jīng)驗以及與之相關(guān)的性能問題?
3 回答

慕無忌1623718
TA貢獻1744條經(jīng)驗 獲得超4個贊
您可以通過使用所謂的自然鍵而不是代理鍵來避免一些已連接的查詢。只有您可以評估其在您的應(yīng)用中的好處是否重要。
也就是說,您可以在應(yīng)用程序中測量最快速的查詢,因為它們可以處理大量數(shù)據(jù),也可以非常頻繁地執(zhí)行。如果這些查詢從消除連接中受益,并且不使用varchar主鍵,那么就這樣做。
不要對數(shù)據(jù)庫中的所有表使用任一策略。在某些情況下,自然鍵可能更好,但在其他情況下,代理鍵更好。
其他人提出一個很好的觀點,即在實踐中很少有自然鍵永遠不會改變或有重復(fù),所以代理鍵通常是值得的。

MYYA
TA貢獻1868條經(jīng)驗 獲得超4個贊
這與表現(xiàn)無關(guān)。這是關(guān)于什么是一個好主鍵。隨著時間的推移,獨特而不變。您可能認為諸如國家/地區(qū)代碼之類的實體從未隨時間而變化,并且是主鍵的良好候選者。但痛苦的經(jīng)歷是很少見到的。
INT AUTO_INCREMENT滿足“獨特且不變的時間”條件。因此偏好。
添加回答
舉報
0/150
提交
取消