2015-05-30 2 views
2

В базе данных MySQL, таблица была создана следующим образом:MySQL Создание таблицы базы данных

CREATE TABLE IF NOT EXISTS `sub` (
`s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id', 
`std` int(10) NOT NULL COMMENT 'Standard', 
`sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name', 
PRIMARY KEY (`s_id`), 
KEY `sub_nm` (`sub_nm`), 
KEY `sub_nm_2` (`sub_nm`), 
KEY `sub_nm_3` (`sub_nm`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='All Subjects with 
    corresponding standerds.' AUTO_INCREMENT=21 ; 

Мой вопрос, что подразумевается под последние три ключевые ценности? То есть: КЛЮЧ sub_nm (sub_nm), КЛЮЧ sub_nm_2 (sub_nm) и КЛЮЧ sub_nm_3 (sub_nm)

ответ

1

КЛЮЧ обычно является синонимом для INDEX. Ключевой атрибут PRIMARY KEY также может быть указан как KEY, если задан в определении столбца. Это было реализовано для совместимости с другими системами баз данных.

For more

1

С помощью этой инструкции KEY sub_nm (sub_nm), KEY sub_nm_2 (sub_nm), KEY sub_nm_3 (sub_nm) создать 3 индексы для sub_nm столбца с именем sun_nm, sub_nm_2 и sub_nm_3

+0

, что польза от множественного индекса? @Taras Soroka – user4956971

+0

Общее, с несколькими индексами (например ... KEY ind1 (column_1), KEY ind2 (column2), .....) вы можете индексировать комбинации значений столбцов и ускорять запросы, такие как SELECT * from ТАБЛИЦА WHERE column1 = X AND column_2 = Y , но в вашем случае я действительно не знаю, что означает создание 3 индексов для 1 поля. –

0

В ответах на вопросы вы уже писали о том, что KEY и INDEX ключевые слова являются синонимами nymous. В дополнение к этому, вот несколько примеров.

Создание индекса с помощью INDEX или KEY ключевое слово при создании таблицы

CREATE TABLE IF NOT EXISTS `sub` (
    `s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id', 
    `std` int(10) NOT NULL COMMENT 'Standard', 
    `sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name', 
    PRIMARY KEY (`s_id`), 
    INDEX `sub_nm` (`sub_nm`), 
    INDEX `sub_nm_2` (`sub_nm`), 
    INDEX `sub_nm_3` (`sub_nm`) 
); 

Это не разумно создать 3 индексов на одном поле. Одного индекса достаточно на sub_nm.

Создание индекса после создания таблицы

CREATE TABLE IF NOT EXISTS `sub` (
    `s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id', 
    `std` int(10) NOT NULL COMMENT 'Standard', 
    `sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name', 
    PRIMARY KEY (`s_id`) 
); 

create index sub_nm on `sub`(sub_nm); 
-- create key sub_nm2 on `sub`(sub_nm); WILL ERROR OUT 
alter table `sub` add index sub_nm3 (sub_nm); 
alter table `sub` add key sub_nm4 (sub_nm); 

Обратите внимание на различные способы можно создать индекс по таблице. Обычно я использую имя индекса: idx_tablename_fieldname (например, idx_sub_sub_nm).

Индекс на sub_nm может повысить производительность запросов, которые используют sub_nm для фильтрации, сортировки и группировки. EXPLAIN помогает определить, будет ли база данных считать, что индекс будет использоваться. Если база данных не использует запрос, который очень сильно верить должно, index hints могут быть предоставлены в запросе, как это:

select s_id from sub use index (idx_sub_sub_nm) where sub_nm = 'test'; 
Смежные вопросы