Два столбца проиндексированы как один или один столбец проиндексирован - PullRequest
2 голосов
/ 18 января 2011

Что предпочтительнее? Взять два столбца и INDEX их вместе, или создать новый столбец и INDEX этот столбец? Например:

INDEX(user_id, key)

Затем запустите:

SELECT value FROM preferences WHERE user_id = 1 AND key = 'something';

Или создайте другой столбец с именем reference, который будет содержать значение 1_something, а затем выполните:

SELECT value FROM preferences WHERE reference = '1_something';

С уважением,
Andrew

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Как и при индексировании всех вещей, это зависит от вашей конкретной ситуации.

Лично я бы выбрал два столбца, одну версию индекса, так как она более правильная, когда вы думаете о данных, делает запросы более четкими, учитываетвыбор диапазона, если вы хотите их и т. д. Сложный ссылочный столбец, скорее всего, будет иметь тип varchar, в то время как два отдельных могут быть int и varchar, что, хотя я считаю, что это два сравнения, будет быстрее ..

Будете ли вы когда-нибудь запросить на user_id без key?IE возвращает все настройки для конкретного пользователя.

Будете ли вы когда-либо выполнять диапазонные запросы для всех пользователей с определенной настройкой или для того, чтобы 1_something был неэффективным?(сравнение varchars с диапазоном значений == неэффективно)

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

0 голосов
/ 21 января 2011

Первый всегда лучше, если вы запрашиваете только один столбец user_id, тогда вы все равно можете использовать тот же индекс. и составной индекс ключа дает лучший поиск ключа также.

0 голосов
/ 18 января 2011

Первый (индекс по 2 столбцам) выглядит намного лучше.Этот индекс будет также использоваться для запросов, которые получают выгоду от индекса на user_id.В случае одного дополнительного столбца вам нужно будет синхронизировать его значение каждый раз, когда изменяется user_id или something.

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