MySQL: составной индекс против нескольких индексов (крайний левый префикс индекса) - PullRequest
0 голосов
/ 12 июня 2018

У нас есть таблица, которая в настоящее время использует составной (т.е. многостолбцовый) индекс.

Скажем,

PRIMARY KEY(A, B)

Конечно, мы можем быстро искать, основываясь только на А ( Самый левый индексный префикс ), и если мы хотим эффективно осуществлять поиск на основе только B, нам нужно создать отдельный индекс для B.

Мой вопрос заключается в том, что если я делаю:

PRIMARY KEY (B)

есть ли какое-либо значение в удержании

PRIMARY KEY (A,B)

Другими словами будет ли какое-либо преимущество, сохраняющее

PRIMARY KEY (A,B)

, если у меня будет

PRIMARY KEY (A)

и

PRIMARY KEY (B)

Ответы [ 2 ]

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

Вам не хватает ключевого момента о PRIMARY KEY - это по определению (по крайней мере, в MySQL) UNIQUE.И не иметь больше столбцов, чем необходимо для того, чтобы сделать PK уникальным.

Если B, один is unique, then have PRIMARY KEY (B) ` без любых других столбцов в определении PK.

Если A является также уникальным, то сделайте

PRIMARY KEY(B),
UNIQUE(A)

или поменяйте их местами.

Для более длительного обсуждения создания индексов,см. моя кулинарная книга .

Если для «уникальности» столбцов обоих необходимо указать

PRIMARY KEY(A, B),
INDEX(B)

или

PRIMARY KEY(B, A),
INDEX(A)

Пока у вас нет SELECTs, трудно определить, какие индексы создать.

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

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

Если у вас есть индекс на (A, B), он будет использовандля запросов, которые используют оба столбца, например:

WHERE A = 1 AND B = 2

, а также для запросов, которые просто используют A:

WHERE A = 3

Но если у вас есть запрос, который просто использует BНапример,

WHERE B = 4

он не сможет использовать индекс вообще.Если вам нужно оптимизировать эти запросы, у вас также должен быть индекс B.Таким образом, вы можете иметь:

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