насколько дорого это добавить уникальное ограничение на все столбцы mysql - PullRequest
0 голосов
/ 04 июня 2018

В общем, я вижу два простых способа убедиться, что в таблице нет повторяющихся строк.

  1. Добавить ограничение UNIQUE для всех столбцов таблицы (в моем случае 3)
  2. Создать идентификатор первичного ключа, который является хешем других столбцов

Последнее будет больше работы для реализации.Предлагает ли он улучшения производительности по сравнению с первичным ключом int вместо 3 столбцов?Или внутренне mysql уже использует какой-то хэш для столбцов при проверке уникальности?

EDIT: типы столбцов: int (11), int (11) и datetime (6)

1 Ответ

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

Количество байтов в индексе ограничено.Например, InnoDB ограничивает индекс до 767 байтов (как объяснено в документации ).Поэтому, в зависимости от вашей строки, вы не сможете определить уникальный индекс или первичный ключ для всех столбцов.

Реализация хэша имеет два недостатка:

  • Хэшиесть столкновения.Таким образом, вероятность может быть очень мала (в зависимости от алгоритма хеширования), но она существует.
  • Вам необходимо добавить значение хеш-функции, что обычно означает использование триггера.

Это все возможно - как и триггеры вставки / обновления, гарантирующие уникальность.

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

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