Mysql запрос оптимизации - с использованием индексов - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть следующие запросы:

select from `table` where `a`>0 order by `b` desc limit 0, 10
select from `table` where `a`<0 order by `b` desc limit 0, 10

Я хочу, чтобы они бежали как можно быстрее. Теперь вопрос в том, что является лучшим решением?

  • создать индекс для a, создать индекс для b
  • создать многоколонный индекс для a, b
  • создать многоколонный индекс для b, a

Я предполагаю, что использование многоколоночного индекса даст лучшие результаты ... но каков правильный порядок столбцов? Будет ли MySQL сопоставляться сначала со столбцом a, а затем b или сначала b, затем a?

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Теория - это одно, на практике вы всегда должны тестировать.

0 голосов
/ 07 декабря 2011

Индекс на (a,b) должен работать быстро.

Документация гласит

Индекс также можно использовать, даже если ORDER BY не соответствует индексу точно, если все неиспользуемые части индекса и все дополнительные столбцы ORDER BY являются константами в предложении WHERE.

Теперь, если> 0, можно считать постоянной величиной, как я думаю, то индекс (a, b) может работать быстрее всех. Хотя вы могли бы попробовать и посмотреть план объяснения.

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html

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