열에 별도의 인덱스 를 정의 해야합니까 email(검색 목적으로), 아니면 인덱스가 UNIQ_EMAIL_USER제약 조건 과 함께 "자동으로"추가 됩니까?
CREATE TABLE IF NOT EXISTS `customer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`first` varchar(255) NOT NULL,
`last` varchar(255) NOT NULL,
`slug` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_SLUG` (`slug`),
UNIQUE KEY `UNIQ_EMAIL_USER` (`email`,`user_id`),
KEY `IDX_USER` (`user_id`)
) ENGINE=InnoDB;
편집 : Corbin이 제안한대로 EXPLAIN SELECT * FROM customer WHERE email = 'address'빈 테이블에 대해 쿼리했습니다 . 이것은 결과입니다. 나는 그것을 해석하는 방법을 모릅니다.
id select_type type possible_keys key key_len ref rows Extra
1 SIMPLE ALL NULL NULL NULL NULL 1 Using where
IXD_EMAIL을 테이블에 추가하는 동안 동일한 쿼리가 다음을 표시합니다.
id select_type type possible_keys key key_len ref rows Extra
1 SIMPLE ref IDX_EMAIL IDX_EMAIL 257 const 1 Using where
1
UNIQUE 제약 조건은 기술적으로 인덱스를 필요로하지 않지만 표준이 인덱스를 어떻게 정의하는지 또는 MySQL (백엔드, btw?)이이를 구현하는지 확실하지 않습니다. MySQL에서 수동으로 찾을 수있는 것은 "고유 인덱스는 인덱스의 모든 값이 구별되어야하는 제약 조건을 생성합니다."입니다.
개별 인덱스와 커버링 (일명 복합-둘 이상의 열) 인덱스를 구현하고 테스트해야합니다. 사용 및 데이터에 따라 다릅니다.
—
OMG Ponies
저는 그것이 실제로 인덱스를 생성한다고 99 % 확신합니다. 고유 한 테이블을 만든 다음 where를 선택하여 설명하십시오.
—
Corbin 2012 년
@Corbin이 그랬습니다. 결과를 어떻게 해석해야합니까?
—
gremo
고유 제약 조건을 인덱스로 사용 했습니까? 그런데 상당히 큰 테이블을 사용해야 할 수도 있고 테이블 스캔 만 수행 할 수도 있습니다.
—
Corbin 2012 년