kshshe
@kshshe
Frontend developer

Как оптимальнее сделать сортировку относительно большого запроса по другой таблице?

Запрос вкратце:

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 тысяч записей.
  • Вопрос задан
  • 903 просмотра
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
Как уже выше сказали - индекс
+ не помешает заменить in (select) на inner join
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Индекс по дате изменения
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы