반응형
UNIQUE 제약 조건이 필드에 INDEX를 자동으로 생성합니까?
열에 별도의 인덱스 를 정의 해야합니까 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
고유 키는 고유성 검사가 추가 된 일반 인덱스처럼 작동하는 인덱스의 특수한 경우입니다. 사용 SHOW INDEXES FROM customer
하면 고유 키가 실제로 B- 트리 유형 인덱스임을 알 수 있습니다.
(email, user_id)에 대한 복합 색인이면 충분합니다. 이메일에만 별도의 색인이 필요하지 않습니다. mysql은 복합 색인의 가장 왼쪽 부분을 사용할 수 있습니다. 인덱스 크기로 인해 쿼리 속도가 느려질 수있는 경계 케이스가있을 수 있지만 실제로 실행될 때까지 걱정할 필요가 없습니다.
인덱스 사용을 테스트하려면 먼저 옵티마이 저가 해당 인덱스를 사용할 가치가 있다고 생각하도록 테이블에 데이터를 채워야합니다.
반응형
'IT story' 카테고리의 다른 글
SimpleDateFormat에 대한 액세스 동기화 (0) | 2020.09.14 |
---|---|
인접한 동일한 요소없이 목록의 모든 순열 생성 (0) | 2020.09.14 |
Node.js에서 만든 웹 사이트를 Github 페이지에 게시하는 방법은 무엇입니까? (0) | 2020.09.14 |
lock (new object ()) —화물 컬트 또는 미친 "언어 특수 사례"? (0) | 2020.09.14 |
ASCII 코드는 7 비트입니까, 8 비트입니까? (0) | 2020.09.14 |