Что такое ПЕРВИЧНЫЙ индекс в mysql - PullRequest
0 голосов
/ 14 марта 2020

Я только что узнал, как создавать индексы в mysql и выполнил такой запрос в mysql верстаке, подключающемся к экземпляру mysql 8.0:

use test;
create table idx (
id int not null unique,
name char(5),
primary key(id),
key(name)
);
show index from idx;

Таблица результатов:

# Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment, Index_comment, Visible, Expression
'idx', '0', 'PRIMARY', '1', 'id', 'A', '0', NULL, NULL, '', 'BTREE', '', '', 'YES', NULL
'idx', '0', 'id', '1', 'id', 'A', '0', NULL, NULL, '', 'BTREE', '', '', 'YES', NULL
'idx', '1', 'name', '1', 'name', 'A', '0', NULL, NULL, 'YES', 'BTREE', '', '', 'YES', NULL

Меня смущает, что есть два индекса key_name = PRIMARAY и key_name = "id", потому что id является первичным ключом. В чем разница между ними?

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Индекс id берется из опции unique для столбца id. Индекс PRIMARY взят из primary key (id).

Поскольку первичный ключ всегда уникален, вам не нужна опция unique, и тогда он не создаст дополнительный индекс.

0 голосов
/ 14 марта 2020

Индексация может быть выполнена с несколькими столбцами таблицы, В B + Tree есть ключ root с большим количеством дочерних узлов. Это означает, что когда вы что-то ищете в своем индексе, сначала выполняется классификация по первичному ключу. Допустим, у вас есть 1 миллион данных, и первичным ключом вашего индекса является порядок имен в алфавитном порядке AS C. Если вы ищете возраст = 15 и имя = Джон, а первичным ключом индекса является имя. Что сделает двигатель БД: Проверьте стартовый индекс «Джон». Затем найдите возраст = 15 во всех «Джон».

Если имя больше идентификатора, то вы должны использовать имя в качестве первичного ключа.

Проверьте это и это

...