source

UNIQURE 제약조건은 필드에 INDEX를 자동으로 생성합니까?

factcode 2022. 10. 13. 23:37
반응형

UNIQURE 제약조건은 필드에 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;

EDIT: Corbin i가 쿼리한 내용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)e-메일에만 별도의 인덱스가 필요하지 않습니다. MySQL은 복합 인덱스의 가장 왼쪽 부분을 사용할 수 있습니다.인덱스의 크기로 인해 쿼리가 느려질 수 있는 경계선이 있을 수 있지만 실제로 마주칠 때까지는 걱정하지 마십시오.

인덱스 사용 테스트에 대해서는 먼저 테이블을 몇 가지 데이터로 채우고 옵티마이저가 인덱스를 실제로 사용할 가치가 있다고 생각하게 해야 합니다.

언급URL : https://stackoverflow.com/questions/9764120/does-a-unique-constraint-automatically-create-an-index-on-the-fields

반응형