Как оптимальнее сделать сортировку относительно большого запроса по другой таблице?
Запрос вкратце:
SELECT ideas.id, ideas.foo, ideas.bar FROM ideas
WHERE aaa=bbb AND ... AND ... AND ...
AND ideas.id IN (SELECT idea_id FROM ideas_tags WHERE tag_name = 'тег_из_подписок')
AND ideas.id NOT IN (SELECT idea_id FROM ideas_tags WHERE tag_name = 'тег_из_чс')
ORDER BY ideas.id DESC
LIMIT 10
Сейчас стоит задача сортировать элементы не по id, а по дате изменения. Проблема в том, что для этого сервер просматривает вообще все идеи, сортирует, а потом уже фильтрует результат, тогда как в исходном запросе этого нет и он останавливается после того, как наберет нужное количество строк.
Я попробовал сделать отдельную таблицу, в которой находятся только id идей и id записи, определяющий их порядок.
Заменил ORDER BY ideas.id DESC на ORDER BY (SELECT id FROM ideas_index WHERE ideas_index.idea_id = ideas.id) DESC. Запрос, само собой, стал выполняться не 0.008 секунды, а 0.2-0.7 в сложных случаях.
Как можно реализовать такую сортировку без сильной потери производительности? В таблице около 50 тысяч записей.
Алексей Казаков, Предоставьте серверу решать самому, какой индекс использовать.
Думаете он не справится сразу с двумя индексами?
Просто сделайте индекс и посмотрите какой будет скорость выполнения запроса.