Driver86
@Driver86
Немодератор toster.ru

Autoincrement или случайная строка в качестве primary key + foreign key?

https://habr.com/ru/articles/665024/
случайное значение, поэтому новая строка может попасть в начало, середину или конец таблицы. Серверу БД в этом случае придётся перемещать другие строки, что приведёт к фрагментации данных, а их извлечение может занять больше времени

Не совсем ясен такой момент.
Есть таблица, с полями "text" и "hash", где "hash" - это primary key и содержит md5 текста (binary(16) not null). Таблица часто join-тся в запросах через hash. Будет ли производительнее, если добавить bigint (строк может быть очень много) autoincrement в качестве primary key, и его использовать в join?
Интересует скорость только чтения из БД, не запись.
БД - MariaDB.

P.S. Просто из той статьи появилось предположение, что, как минимум для MariaDB/MySQL, наличие числового последовательного primary key, даже если он не используется в запросах, заметно важно для скорости чтения, т.к. в таком случае данные на диске расположены несколько "согласованно". Так ли это? Или создавать такой ключ просто ради того, что бы был - полная бессмыслица?
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
из той статьи появилось предположение

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

Таблица часто join-тся в запросах через hash.

Что, берутся все записи таблицы, и сортировка выходного набора тоже по этому полю? нет? тогда статья тут близко не лежала.

"hash" - это primary key и содержит md5 текста

Тип данных и размер мы должны сами придумать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы