INDEX와 ALTER TABLE ADD INDEX 만들기-MySQLism 또는 SQL 표준?


28

색인을 만드는 방법에 따라 색인 이름이 필요한 이상한 문제가 발생했습니다.

http://dev.mysql.com/doc/refman/5.5/en/create-index.html

http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name

ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name

CREATE INDEX 호출은 인덱스 이름을 요구하지 않아야합니다. 이것이 MySQLism인지 아니면 SQL 표준인지 궁금합니다.

답변:


25

SQL 표준이 인덱스를 만드는 방법전혀 정의하지 않는다고 생각 합니다 .

이 위키 백과 페이지 의 인용문 :

표준화

ISO SQL 표준은 물리적 측면을 다루지 않기 때문에 인덱스 생성에 대한 표준은 없습니다. 인덱스는 스토리지 (테이블 스페이스 또는 파일 그룹)와 같은 데이터베이스 개념의 물리적 부분 중 하나입니다. RDBMS 공급 업체는 모두 고객에게 제공하는 기능에 따라 특정 옵션이있는 CREATE INDEX 구문을 제공합니다.

Postgres 매뉴얼은 다음을 지원하는 것 같습니다.

SQL 표준에는 인덱스에 대한 규정이 없습니다.

SO에 대한이 관련 질문에 대한 더 많은 증거.


6
MySQL은 내가 아는 유일한 DBMS로 명시 적 인덱스를 사용하여 추가 할 수 있습니다 ALTER TABLE(제한을 지원하기 위해 다양한 DBMS에 의해 암시 적 인덱스가 생성되는 경우가 있습니다).
a_horse_with_no_name

@a_horse_with_no_name : 정식으로 언급되었습니다. MySQL이 왜 이름을 처리 할 수 ​​없을 때 index_name을 전달 해야하는지 이해하지 못합니다. 명명 지수를 피하기 위해 단순히 변경을 수행하는 것은 PITA입니다.
Mike Purcell

-1

인덱스 이름을 제공하지 않으면 MySQL이 자동으로 인덱스 이름을 지정합니다.

ALTER TABLE my_table ADD INDEX (col1);
ALTER TABLE my_table ADD INDEX (col1, col2);
ALTER TABLE my_table ADD INDEX (col2);

SHOW INDEX FROM my_table;

ALTER TABLE ADD INDEX위 의 내용은 다음과 같은 색인을 생성합니다.

  • col1
  • col1_2
  • col2

열이 하나만있는 색인을 작성하는 경우 색인 이름을 제공하지 않아도됩니다 (색인 이름이 열 이름과 동일하므로). 그러나 여러 열이있는 인덱스를 만드는 경우 인덱스를 쉽게 식별 할 수 있도록 인덱스 이름을 제공하는 것이 좋습니다.

색인의 이름을 제공하고 색인 idx으로 식별 할 수있는 접두어를 지정하는 것이 좋습니다 .

ALTER TABLE my_table ADD INDEX idx_my_column (my_column);

-- or
CREATE INDEX idx_my_column ON my_table (my_column);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.