2010-10-27 95 views
1

你知道哪些表srtucture更好:基本性能比較

table user 
id INT pk autoincrement 
name VARCHAR(255) 
email VARCHAR(255) 
statut TINYINT(4) 

的statut只能容納2種狀態:1/2

OR

table user 
id INT pk autoincrement 
name VARCHAR(255) 
email VARCHAR(255) 
statut VARCHAR(45) 

的statut只能容納2狀態:活動/不活動

我正在尋找最快的方式來做select語句,如

SELECT id, name, email 
FROM user 
WHERE statut=:statut 

我讀的地方,「整數」類型通常比處理「文本」類型 更快 但對於其他一些原因,我寧願到statut 存儲與VARCHAR類型。
有沒有辦法使用類型爲VARCHAR的statut並且運行速度更快?
或者是第一個結構確定最快的?

+0

有一個在這裏閱讀http://www.mysqlperformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joined-table-what-is-faster/#comment-624098和這http://www.mysqlperformanceblog.com/2008/08/09/picking-datatype-for-status-feilds/#comment-343318 – 2010-10-27 07:33:14

+0

謝謝。現在我再次不確定最佳方法... – ling 2010-10-27 07:52:24

+0

我個人使用一個字節tinyint(0,'un-verified'),(1,'active'),( - 1,'closed'),因爲它允許你添加新的狀態值而不改變表格定義,比如enum數據類型,對於大型表格可能需要幾小時!如果你不關心使用枚舉。 – 2010-10-27 07:57:12

回答

2

如果您確定只需要在該列中存儲2個值,則可以使用ENUM。將文本的用戶友好性與整數的性能和空間效率相結合。

+0

謝謝你,正是我一直在尋找的! – ling 2010-10-27 07:33:00

+0

因爲ENUM不是標準的SQL AFAIK,你也可以確定你永遠不會遷移到另一個DBMS。當然,遷移時總會有一些變化,但我寧願最大限度地減少所需的工作量而不是最大化。 – pkauko 2010-10-27 07:34:13

+0

哎呀。好的,謝謝你的精確度。 – ling 2010-10-27 07:35:44