если мы можем иметь нулевое значение для уникального индекса, имеет ли запрос меньшую продолжительность? - PullRequest
0 голосов
/ 01 октября 2019

Я хочу добавить уникальный ключ из трех столбцов (a, b, c), столбец 'a' является первичным ключом. Возможно ли это?

----------
a  |  b   | c
1  | b1   | c1
2  | null | c2
3  | null | null

Возможно ли это в качестве уникального ключа, если у нас может быть нулевое значение для уникального индекса, будет ли запрос меньше времени?

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

В MySQL PRIMARY KEY - это, по определению, UNIQUE и ключ.

Итак, сказать "1005 *

PRIMARY KEY(a),
UNIQUE(a,b,c)

" - глупая вещь. Так же и INDEX(a,b,c). Индекс, начинающийся с того же столбца (столбцов), что и другой (PRIMARY KEY(a)), почти никогда не приносит никакой пользы.

Если вы хотите искать вещи по b и c, скажем INDEX(b,c)и / или (c,b).

В InnoDB PK неявно привязывается к любому вторичному индексу. То есть INDEX(b,c) действует как INDEX(b,c,a).

UNIQUE(b,c), что говорит о том, что комбинация b и c однозначно идентифицирует каждую строку. Но , в этом контексте NULLs обрабатываются как отличающиеся.

a  |  b   | c
--   ----   ----
1  | b1   | c1
2  | null | c2
3  | null | null
4  | null | c2

Теперь UNIQUE(b,c) в порядке, потому что NULL разные.
Но UNIQUE(c) потерпит неудачу.

Производительность, вероятно, не проблема нигде в этой области. Следуйте совету выше по созданию (и избеганию) индексов;тогда я могу обратиться к производительности дальше.

0 голосов
/ 01 октября 2019

Все базы данных допускают значения NULL в уникальном индексе. Однако они не обрабатывают значения NULL согласованно.

MySQL допускает дублирование значений NULL, поэтому вы можете вставить как несколько значений NULL / NULL (при условии, что уникальный индекс включен(b, c).

Таким образом, базы данных не допускают дублирования. Здесь - это тот же пример, например, на SQL Server.

Здесь - этодб <> скрипку.

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