2010-10-27 102 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