В 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)
потерпит неудачу.
Производительность, вероятно, не проблема нигде в этой области. Следуйте совету выше по созданию (и избеганию) индексов;тогда я могу обратиться к производительности дальше.