Tôi hiện đang có schema này:MySQL hiệu suất truy vấn tiến thoái lưỡng nan: enum vs bảng
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..*/
Query:
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 */
giải pháp mới của tôi:
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;
Query:
SELECT
*
FROM users
Từ những gì tôi thấy đang sử dụng ENUM rất đơn giản và có thể rất nhanh để thực thi.
- Tôi có đúng không? Nó sẽ nhanh hơn cho Công cụ MySQL để xử lý một trường loại ENUM chứ không phải là LEFT JOINs?
- Sử dụng ENUM có thực hành tốt không?
Cảm ơn
Bảng là tốt nếu danh sách enum sẽ được thay đổi. Nó chỉ là một truy vấn chèn/cập nhật đơn giản. Enums sẽ yêu cầu một bảng thay đổi. –
số nguyên đã ký (4 byte) cho các kiểu tra cứu có vẻ hơi quá mức - làm thế nào về tinyints chưa được ký? –
Tôi nên sử dụng int không dấu? Tôi có hơn 200.000 người dùng – Tech4Wilco