Как оптимизировать сортировку по count(*)? Создать индекс или представление?

Есть таблица постов и ключевых слов, связанных многие-ко-многим. При выборке постов их нужно сортировать по дате и количеству связанных кейвордов. Этот запрос тормозит и нужно его оптимизировать. Я уже создал индекс для поля даты, но теперь нужно добавить сортировку по кол. кейвордов. Как это сделать, если count(*) вычисляется динамически?
Если создавать представление, то на сколько удобно будет работать с ним через EF?
  • Вопрос задан
  • 256 просмотров
Пригласить эксперта
Ответы на вопрос 3
@maxtm
Make money, not job
Сделайте поле tag_count и пишите туда int. Повесьте индекс. Обновляйте кол-во при изменение записи.
После добавления поля можно разом обновить значения одним запросом.
Ответ написан
Комментировать
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ну и не менее классический совет - предрасчитанные таблицы. Т.е. Вы ночью/в обед (во время низкой нагрузки) заранее считаете свой count(*) и пишите в отдельную таблицу. Возможно придется ввести флаг для поста "обновлялось с момента пересчета"
в этом случае Ваш count сложится из предрасчитанного значения + счетчик по постам, обновившимся с момента пересчета.
Ответ написан
Комментировать
@Noxy
увлекаюсь SQL
Показали бы запрос, возможно его проще по другому написать
Так же индекс на дату вы какой сделали?.
Что показывает план запроса?.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы