у нас есть несколько пользовательских форм, которые включают в себя меню «период», где пользователь может запросить сервер вернуть данные за определенный диапазон дат, например «Заказы на покупку, выпущенные в период с 1 по 10 октября 2008 года».
Логика заключается в том, чтобы добавить «на лету» диапазон дат к исходному запросу SQL и запросить данные. Синтаксис фильтра, добавленного к запросу:
WHERE myDate >=dateMin and myDate <= dateMax
или, если в исходном запросе уже есть предложение фильтра:
WHERE <original filter> AND (myDate >=dateMin and myDate <= dateMax)
С датами dateMin и dateMax в формате «ГГГГММДД».
Вчера мы начали получать тайм-ауты запросов для нашей формы «ошибок», которая специально запрашивает нашу таблицу «ошибок». После некоторых тестов выяснилось, что проблема с тайм-аутом возникала только при запросе данных из таблицы ошибок и за октябрь. Тот же запрос с тем же синтаксисом (изменяются только значения dateMin и dateMax) при отправке с другим диапазоном (сентябрь, август или любой другой) в той же таблице не истек! Это происходило либо при отправке из приложения, либо непосредственно из Sql Server Management Studio.
Мы избежали проблемы тайм-аута, добавив индекс в столбец errorDate таблицы ошибок (мы должны были сделать это раньше, я знаю, но мы забыли!). У нас все еще есть задержка запроса, которая в 4-5 раз превышает стандартную при запросе на октябрьские даты!
Мы пытались сделать запрос по меньшим интервалам, таким как «первые 15 дней», «последние 15 дней». Запрос «первые 15 дней» занимает больше времени, чем запрос последних 15 дней, что все еще значительно медленнее, чем запросы в другие периоды.
Я чувствую, что проблема только избегается, но не решается, и я все еще чувствую себя весьма обеспокоенным этим поведением. Кто-нибудь когда-нибудь замечал такие странные вещи, или кто-нибудь имеет представление о , что происходит ?