Индекс против идентификатора автоматического увеличения, установленного как PK - PullRequest
0 голосов
/ 06 июня 2018

В MySQL, в чем разница между индексом и ID , установленным на AUTO_INCREMENT и в качестве первичного ключа?

Будет ли это также увеличивать скорость поиска в базе данных?Или AUTO_INCREMENT ID только для целей пользователя, и компьютер не учитывает его при поиске в базе данных?Читая о INDEX на w3schools.com, я наткнулся на эту строку:

Индексы используются для очень быстрого извлечения данных из базы данных.Пользователи не могут видеть индексы, они просто используются для ускорения поиска / запросов.

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

В MySQL первичный ключ создает индекс для ключа.,,но исходные страницы данных являются листьями индекса.Это может быть немного запутанным, но эффект состоит в том, что данные фактически сортируются на страницах данных.

Обычный индекс реализован в виде b-дерева (примечание: стандарты "b" для "сбалансированного")а не "бинарный", вопреки тому, во что верят многие люди).Листья хранятся отдельно от исходных данных.

auto_increment - это свойство одного столбца таблицы, где значение устанавливается на новое значение при каждой вставке, а новое значение больше, чем предыдущеезначение.Приращение обычно составляет 1, но это не гарантируется.auto_increment не имеет прямого отношения к индексированию, но почти всегда связано с первичным ключом таблицы.

Таким образом, в обоих случаях у вас есть индекс.Индекс первичного ключа немного меньше, поскольку хранилище объединено с самими страницами данных.С другой стороны, данные должны быть в порядке на диске, что может усложнить вставки и обновления.С другой стороны, автоинкремент гарантирует, что все новые строки идут в конце данных.С другой стороны, у меня кончились руки.

0 голосов
/ 06 июня 2018

AUTO_INCREMENT - генератор целочисленных последовательностей и ничего более.Он не имеет никакого отношения к индексам любого вида и существует только для генерации уникальных последовательных чисел.Он часто используется для генерации целочисленных суррогатных ключей , которые часто используются в качестве первичных ключей.

Вам не нужно использовать AUTO_INCREMENT или целочисленные идентификаторы в качестве индекса, пока выиметь одно или несколько полей, которые вы можете использовать для уникальной идентификации строки.

Фактически, с точки зрения масштабируемости, генераторы последовательностей, такие как AUTO_INCREMENT, являются контрпродуктивными, поскольку вы можете иметь только один экземпляргенератор последовательности, ограничивающий количество серверов «master / write» и / или производительность вставки узких мест до производительности узла, на котором работает генератор.

0 голосов
/ 06 июня 2018

Когда вы индексируете столбец, вы создаете двоичное дерево (или, возможно, другую структуру данных) для ускорения процесса поиска.

Индекс или первичный ключ по умолчанию индексируются.

Auto_Incrementозначает, что вы хотите, чтобы MySQL автоматически устанавливал значение для столбца при вставке новой строки.Значение будет установлено постепенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...