Производительность индекса MySQL… индекс WHERE в зависимости от статуса - PullRequest
0 голосов
/ 12 ноября 2011

Таблица содержит 4 столбца: id (автоинкремент), идентификатор пользователя (уникальный, например, ssn), статус (значения TINYINT (1), 0 или 1, не NULL), user_info (varchar (1000)).

Должен ли я поместить индекс в столбец идентификатора пользователя для повышения производительности, если: 30% запросов это

"SELECT user_info from Table1 WHERE userid='1234567'";

40% запросов:

"SELECT user_info from Table1 WHERE userid='1234567' AND status=0";

20% запросов:

"SELECT user_info from Table1 WHERE userid='1234567' AND status=1";

Или есть лучший способ повысить производительность (мне следует подумать об индексации столбца статуса)?

Должен ли я что-то изменить, если вместо (30%, 40%, 20%) оно действительно станет (9%, 90%, 1%), т. Е. Большинство запросов для статуса = 0? Спасибо.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2011

Индекс на status вряд ли увеличит производительность SELECT, поскольку содержимое столбца недостаточно разнородно.Скорее всего, индекс на userid значительно повысит производительность, так как содержимое столбца очень разнообразно.

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

0 голосов
/ 13 ноября 2011

Я предлагаю удалить столбец идентификатора (синтетический ключ - для чего он нужен?). Затем создайте накопительный PK user_id (первый) и статус (второй).

Еще лучшее решение - удалить статус с ПК и выбирать всегда только по user_id. Проверьте статус в приложении и киньте 404 или что-то еще.

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