mysql AND index - PullRequest
       22

mysql AND index

2 голосов
/ 15 января 2012

У меня есть индекс, структурированный так:

BTREE merchant_id
BTREE flag

BTREE test    (merchant_id, flag)

Я делаю запрос SELECT следующим образом:

 SELECT badge_id, merchant_id, badge_title, badge_class
FROM badges WHERE merchant_id = 1 AND flag = 1

Какой индекс будет лучше?Имеет ли значение, если они находятся в отдельном индексе?

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Чтобы ответить на такие вопросы, как «Какой столбец лучше индексировать?» И «Использует ли планировщик запросов определенный индекс для выполнения запроса?», Вы можете использовать оператор EXPLAIN ,См. Превосходную статью Анализ запросов на скорость с EXPLAIN для полного обзора использования EXPLAIN в оптимизации запросов и схемы.

В общем, где запрос может быть оптимизированиндексируя один из нескольких столбцов, полезное правило заключается в том, чтобы индексировать столбец, который является «наиболее уникальным» или «наиболее избирательным» по всем записям;то есть индексировать столбец, который имеет наибольшее количество различных значений во всех строках.Я предполагаю, что в вашем случае столбец merchant_id содержит наибольшее количество уникальных значений, поэтому его, вероятно, следует проиндексировать.Вы можете проверить, что выбор индекса является оптимальным, используя EXPLAIN в запросе для всех вариантов.

Обратите внимание, что практическое правило «индексировать наиболее селективный столбец» не обязательно относится к выбору первого столбца.составного (также называемого составным или многостолбцовым) индекса.Это зависит от ваших запросов.Если, например, employee_id является наиболее избирательным столбцом, но вам нужно выполнять запросы, подобные SELECT * FROM badges WHERE flag = 17, то наличие единственного индекса в таблице badges составного индекса (employee_id, flag) будет означать, что запрос приведет кполное сканирование таблицы.

1 голос
/ 16 января 2012

Из 3-х индексов вам на самом деле не нужен отдельный индекс merchant_id, поскольку при поиске в merchant_id может использоваться ваш «тестовый» индекс.

Подробнее: http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

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