나는 현재이 스키마가 있습니다MySQL의 쿼리 성능 딜레마 : 테이블 대 열거
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을 사용하면 매우 간단하고 실행할 수 있습니다.
- 맞습니까? LEFT JOIN보다 ENUM 타입 필드를 처리하는 것이 MySQL 엔진에 더 빠르지 않습니까?
- ENUM을 사용하고 있습니까? 상기 ENUM 데이터 타입이 테이블 자체에 각 레코드에 대해 다른 테이블을 읽을 수있는 (즉 필요)
2) 예를 인덱싱하지로
감사
열거 형 목록이 변경되면 테이블이 적합합니다. 그것은 단지 간단한 삽입/업데이트 쿼리 일뿐입니다. 열거 형에는 alter table이 필요합니다. –
조회 유형에 대한 부호있는 정수 (4 바이트)가 약간 과장된 것처럼 보입니다 - 부호없는 tinyints는 어떻습니까? –
부호없는 int를 사용해야합니까? 200,000 명이 넘는 사용자가 있습니다 – Tech4Wilco