복붙노트

[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. ==============================

    1.고유 키의 고유성에 대한 추가 검사와 일반 인덱스처럼 행동, 인덱스의 특별한 경우이다. 고객의 SHOW 인덱스를 사용하여 당신은 당신의 고유 키가 사실 B-트리 형 인덱스에 볼 수 있습니다.

    고유 키의 고유성에 대한 추가 검사와 일반 인덱스처럼 행동, 인덱스의 특별한 경우이다. 고객의 SHOW 인덱스를 사용하여 당신은 당신의 고유 키가 사실 B-트리 형 인덱스에 볼 수 있습니다.

    (이메일, USER_ID)에 종합 지수는 충분하다, 당신은 오직 이메일에 별도의 인덱스가 필요하지 않습니다 - MySQL은 복합 인덱스의 맨 왼쪽 부분을 사용할 수 있습니다. 이 인덱스의 크기가 쿼리를 늦출 수있는 국경의 경우 수 있지만, 실제로 그들로 실행할 때까지 당신은 그들에 대해 걱정해야한다.

    먼저하기 위해 일부 데이터 테이블을 작성해야 인덱스 사용을 테스트로 최적화는 해당 인덱스를 사용하는 것이 실제로 가치가 있다고 생각.

  2. from https://stackoverflow.com/questions/9764120/does-a-unique-constraint-automatically-create-an-index-on-the-fields by cc-by-sa and MIT license