[SQL] 고유 제약 조건이 자동으로 필드 (들)에 인덱스를 만들 수 있습니까?
SQL고유 제약 조건이 자동으로 필드 (들)에 인덱스를 만들 수 있습니까?
나는 (목적으로 검색을위한) 이메일 열에 대한 별도의 인덱스를 정의 할 경우, 또는 인덱스가 "자동으로"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;
편집 : 코빈에 의해 제안 고객으로부터 SELECT *를 EXPLAIN을 위해 내가 쿼리 WHERE 빈 테이블에 이메일 = '주소'. 이 결과, 나는 그것을 해석하는 방법을 모른다 :
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.고유 키의 고유성에 대한 추가 검사와 일반 인덱스처럼 행동, 인덱스의 특별한 경우이다. 고객의 SHOW 인덱스를 사용하여 당신은 당신의 고유 키가 사실 B-트리 형 인덱스에 볼 수 있습니다.
고유 키의 고유성에 대한 추가 검사와 일반 인덱스처럼 행동, 인덱스의 특별한 경우이다. 고객의 SHOW 인덱스를 사용하여 당신은 당신의 고유 키가 사실 B-트리 형 인덱스에 볼 수 있습니다.
(이메일, USER_ID)에 종합 지수는 충분하다, 당신은 오직 이메일에 별도의 인덱스가 필요하지 않습니다 - MySQL은 복합 인덱스의 맨 왼쪽 부분을 사용할 수 있습니다. 이 인덱스의 크기가 쿼리를 늦출 수있는 국경의 경우 수 있지만, 실제로 그들로 실행할 때까지 당신은 그들에 대해 걱정해야한다.
먼저하기 위해 일부 데이터 테이블을 작성해야 인덱스 사용을 테스트로 최적화는 해당 인덱스를 사용하는 것이 실제로 가치가 있다고 생각.
from https://stackoverflow.com/questions/9764120/does-a-unique-constraint-automatically-create-an-index-on-the-fields by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 때 타임 스탬프 (자동) 업데이트됩니까? (0) | 2020.06.01 |
---|---|
[SQL] 어떻게 다른 데이터베이스에 하나의 데이터베이스에서 테이블 값을 삽입하려면? (0) | 2020.06.01 |
[SQL] DISTINCT 사용하고 MySQL의 쿼리에 함께 COUNT (0) | 2020.06.01 |
[SQL] 그것은 선택하는 것이 가능하다 비트로 직접 EXISTS? (0) | 2020.06.01 |
[SQL] 외래 키에 의해 링크 된 데이터 삽입 속으로 테이블 (0) | 2020.06.01 |