СТВОРИТИ ІНДЕКСУ ПРО ВІДКЛЮЧЕННЯ ТАБЛИЦІ ДОДАТИ ІНДЕКС - MySQLism або SQL Standard?


28

Щойно натрапив на дивну проблему, згідно з якою залежно від того, як я створюю індекс, потрібно вказати ім’я індексу.

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

http://dev.mysql.com/doc/refman/5.5/uk/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 - єдина СУБД, яку я знаю, яка дозволяє додавати явний індекс за допомогою ALTER TABLE(є певні випадки, коли неявні індекси створюватимуться різними СУБД для підтримки обмежень, але це не те, що я маю на увазі).
a_horse_with_no_name

@a_horse_with_no_name: Помічено належним чином. Я не розумію, чому MySQL змушує нас передавати ім'я_індексу, коли явно він не може обробляти жодне ім’я під ним. Це PITA, щоб змусити його змінити просто, щоб уникнути називання індексів.
Майк Перселл

-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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.