2012-01-11 107 views
2

我有一個數據庫使用VARCHAR(255)作爲其主鍵在表上,他們看起來像GUIDs。 Int不會更好的表現嗎?MySQL的主鍵和VARCHAR(255)

+0

是的,由於PK通常在anotehr表中連接到FK(具有相同類型),因此尺寸很小很好。對於性能,int(大小爲4或8)通常優於255。 – 2012-01-11 22:29:23

+1

此外,作爲InnoDB引擎中的PK,GUID並不是很好,因爲聚集索引隨着值的增加而變得更好,而不是隨機的(如GUID產生的)。 – 2012-01-11 22:31:39

+0

看到這個[類似的問題和有趣的答案](http://stackoverflow.com/questions/332300/is-there-a-real-performance-difference-between-int-and-varchar-primary-keys) – 2012-01-11 22:36:47

回答

2

這取決於你的存儲引擎,但一般來說int/bigint會更好。如果您使用的是innodb,則由於聚集索引的工作方式,uuid/guid是主鍵的不好選擇。請閱讀blog以瞭解更多信息。總結一下,鍵是按範圍存儲的,因爲uuids'是隨機的,所以它們會使插入和查找的效率降低,因爲您會通過讀取和寫入每行的整個內存塊來使緩存過載。

0

Ints佔用磁盤空間更少,因此在搜索時需要更少的I/O。只要範圍適合你的需要,我會說一個int將會更快。

相關問題