Mysql Order By DESC медленно только для определенных условий - PullRequest
0 голосов
/ 21 марта 2011

У меня есть база данных с миллионами строк, что немного. Все они отсортированы по городам с указанием city_id (проиндексирован). Я хотел показать самый последний пост с:

SELECT * FROM table FORCE INDEX(PRIMARY, city_id) WHERE city_id=1 ORDER BY 'id' DESC LIMIT 0,4

id также помечен как основной. До добавления индекса силы потребовалось 5,9 секунды. Я нашел это решение на SO, и оно отлично работало. Запрос теперь занимает 0,02 секунды.

Проблема в том, что это работает только в city_id 1, когда я меняю этот город на 2 или 3 или что-то еще, кажется, что оно возвращается к 6 секундам.

Я не уверен, как работает mysql. Индекс лучше по частым запросам или я что-то здесь упускаю.

1 Ответ

0 голосов
/ 21 марта 2011

Сделайте объяснение по вашему запросу (с применением силы и без нее):

explain SELECT * FROM table WHERE city_id=1 ORDER BY 'id' DESC LIMIT 0,4

и посмотрите, что MySQL скажет вам о стоимости использования определенного индекса. Что касается вашей стратегии индексирования и вашей силы: MySQL любит комбинированные индексы и обычно не очень хорош в их комбинировании, а первичная индексация всегда на , поэтому указывать ее не нужно. Что касается вашего заявления, я бы использовал что-то вроде этого и посмотрел, улучшает ли оно производительность:

select * from table use index(city_id) where city_id=1 ORDER BY 'id' 
DESC LIMIT 0,4
* 1008. ).

Вы найдете много полезных советов и советов по производительности в MySQL Performance Blog .

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