【发布时间】:2011-10-24 17:41:51
【问题描述】:
我目前有这个架构:
CREATE TABLE `users` (
`users_id` int(11) NOT NULL AUTO_INCREMENT,
`users_name` varchar(50),
`users_lastname` varchar(50),
`users_dob` date,
`users_type` int(11) NOT NULL default 0,
`users_access` int(11) NOT NULL default 0,
`users_level` int(11) NOT NULL default 0,
/* etc...*/
PRIMARY KEY (`users_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `users_types` (
`types_id` int(11) NOT NULL AUTO_INCREMENT,
`types_name` varchar(50),
PRIMARY KEY (`types_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/* etc..*/
查询:
SELECT
types_name AS user_type,
/* all other fields*/
users.*
FROM users
INNER JOIN users_types ON (users.users_type=types_id);
/* INNER JOIN for all other tables*/
/* Rest of query */
我的新解决方案:
CREATE TABLE `users` (
`users_id` int(11) NOT NULL AUTO_INCREMENT,
`users_name` varchar(50),
`users_lastname` varchar(50),
`users_dob` date,
`users_type` ENUM('type1', 'type2', 'type3'),
`users_access` ENUM('access1', 'access2', 'access3'),
`users_level` ENUM('level1', 'level2', 'level3'),
/* etc...*/
PRIMARY KEY (`users_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
查询:
SELECT
*
FROM users
据我所知,使用 ENUM 非常简单,并且执行速度非常快。
- 我说的对吗? MySQL 引擎处理 ENUM 类型字段会比处理 LEFT JOIN 更快吗?
- 使用 ENUM 是一种好习惯吗?
谢谢
【问题讨论】:
-
如果枚举列表将被更改,表是好的。这只是一个简单的插入/更新查询。枚举需要一个变更表。
-
用于查找类型的有符号整数(4 字节)似乎有点过分 - 无符号 tinyints 怎么样?
-
我应该使用无符号整数吗?我有超过 200,000 个用户
标签: mysql performance enums