2016-02-09 4 views
0

У меня есть простой запрос:.ИНЕКЕ замедляет ВЫБЕРИТЕ запрос значительно

SELECT distinct state FROM customers WHERE country = 'us' 

Идея заключается в том, чтобы получить список государств в США, что клиенты живут в

У меня есть около 800 тыс. строк и индекс на state и на country. Этот запрос занимает около 4 секунд для запуска, что слишком долго, поскольку это должно быть в режиме реального времени.

Если я удалю пункт WHERE, он почти мгновенно отобразит его. Я посмотрел, почему, и когда я запускаю explain по запросу с предложением WHERE, он не использует индекс state. Когда я избавляюсь от предложения WHERE, он снова начинает использовать индекс состояния. Почему это происходит, и есть ли способ заставить меня использовать оба индекса?

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

Update:

Я обнаружил, что если я делаю индекс на us_state, он работает примерно .5s, что достаточно хорошо. В какой-то момент я хотел бы иметь несколько частей в предложении WHERE, поэтому создание составного индекса для всех частей по-прежнему не является оптимальным. Поэтому я оставляю этот вопрос открытым, ища лучшее решение.

CreateTable

CREATE TABLE `customers` (
`country` varchar(5) DEFAULT NULL, 
`st` varchar(50) DEFAULT NULL, 
KEY `state` (`state`), 
KEY `country` (`country`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
+0

просто проверить, потому что иногда MySQL планировщик запросов является помешанным, вы получите такой же результат для 'Выбора состояния от клиентов WHERE страны =«нас»GROUP BY state'? – hobbs

+0

Да, к сожалению, «группа by» занимает около 4 секунд. – user3413723

+0

Я бы посоветовал добавить общий численный индекс для страны = 'us' и сделать то, что на нем. MySQL довольно плох, когда дело доходит до того, что вы имеете дело со всем текстом. Числа, он может справиться хорошо. Кроме того, каковы мощности этих индексов? – khuderm

ответ

Смежные вопросы