Как оптимизировать сортировку по count(*)? Создать индекс или представление?
Есть таблица постов и ключевых слов, связанных многие-ко-многим. При выборке постов их нужно сортировать по дате и количеству связанных кейвордов. Этот запрос тормозит и нужно его оптимизировать. Я уже создал индекс для поля даты, но теперь нужно добавить сортировку по кол. кейвордов. Как это сделать, если count(*) вычисляется динамически?
Если создавать представление, то на сколько удобно будет работать с ним через EF?
Сделайте поле tag_count и пишите туда int. Повесьте индекс. Обновляйте кол-во при изменение записи.
После добавления поля можно разом обновить значения одним запросом.
ну и не менее классический совет - предрасчитанные таблицы. Т.е. Вы ночью/в обед (во время низкой нагрузки) заранее считаете свой count(*) и пишите в отдельную таблицу. Возможно придется ввести флаг для поста "обновлялось с момента пересчета"
в этом случае Ваш count сложится из предрасчитанного значения + счетчик по постам, обновившимся с момента пересчета.