У меня есть два очень похожих запроса, используя метод Linq ExecuteQuery, первый занимает 30 секунд, а второй - промежуточный.
Я выполняю запросы также в Microsoft SQL Server Management Studio, и оба запросавремя ответа 0 секунд.
Запрос 1 (медленный)
IEnumerable<ViewDataTanksDataDevice> res=
this.ExecuteQuery<ViewDataTanksDataDevice>(
"SELECT TOP 1 * FROM ViewDataTanksDataDevicesSB WHERE id_tank = {0} AND date >= {1} order by date",
new object[] { tankId, date });
Запрос 2 (быстрый)
IEnumerable<ViewDataTanksDataDevice> res=
this.ExecuteQuery<ViewDataTanksDataDevice>(
"SELECT TOP 1 * FROM ViewDataTanksDataDevicesSB WHERE id_tank = {0} AND date <= {1} order by date desc",
new object[] { tankId, date });
Примечание 1: ViewDataTanksDataDevicesSB - это представление с привязкой SCHEMA, и оно имеет два индекса
- Индекс 1 (id_tank, дата asc)
- Индекс 2 (id_tank, date desc)
Примечание 2: Если я выполню первый второй запрос, результат будет идентичным: медленный Query1 и быстрый Query 2.
Примечание 3: представление имеет миллионы регистров, ирезультаты одинаковы для разных дат и танков.