Проблема с датами в SQL Server

У меня есть два набора запросов, один работает нормально, а другой нет:

Не сработал запрос:

select * 
from statusreport 
where START_DATE_TIME >= '2019-03-01 00:00:00.000' 
  and START_DATE_TIME < '2019-03-05 00:00:00.000'

Запрос не отвечает. Никаких результатов не получено, и запрос постоянно находится в состоянии выполнения.

Запрос, который работал:

select * 
from statusreport 
where START_DATE_TIME >= '2019-02-20 00:00:00.000' 
  and START_DATE_TIME < '2019-03-05 00:00:00.000'

Когда я был беспомощен, я начал возвращаться к дате начала, и я получил запрос, дающий какой-то результат.

Это не имеет никакого смысла, по крайней мере для меня. Записей тоже не много. У меня едва ли есть 2 тыс. строк, из которых около 200 соответствовали бы запросу 1, который я упомянул выше.

Что может быть причиной такого поведения? Я пропустил что-то важное?

Вы должны сравнить оба плана выполнения. Если у вас есть индекс на START_DATE_TIME, его можно было использовать в первом случае из-за устаревшей статистики: сервер мог подумать, что строк нет / очень мало строк для этого интервала, и использовать вложенные циклы (поиск некластеризованного индекса + поиски). Во втором случае он может выбрать сканирование таблицы

sepupic 05.03.2019 08:12

Можете ли вы попробовать использовать синтаксис Between? Они эквивалентны, потому что движок преобразует оператор between в ваш формат.

Norcino 05.03.2019 08:22

Кроме того, если у вас есть индекс в столбце start_date_time, он может быть поврежден, и вам может потребоваться создать его.

Norcino 05.03.2019 08:24

«Между» не даст эквивалента, так как запрос теперь не включает день 2019-03-05, а между ними будет получен результат с включенным 2019-03-05 00:00:00. В любом случае проблема не здесь

sepupic 05.03.2019 08:29

@Yutha Пожалуйста, вставьте свои планы сюда brentozar.com/pastetheplan и обновите свои вопросы со ссылками на оба плана.

sepupic 05.03.2019 08:32

Упомянутое вами небольшое количество строк должно запускаться мгновенно даже без использования индексов. Является ли отчет о статусе таблицей? Или это сверхсложное представление, которое выполняет агрегированные вычисления для миллионов соединенных строк, чтобы получить, казалось бы, маленькие 2k строк, которые вы упомянули?

George Menoutis 05.03.2019 08:37

@Norcino С DATETIME довольно опасно использовать BETWEEN. Вы можете прочитайте этот плохая привычка пинать Аарона Бертрана

Shnugo 05.03.2019 08:37

Ожидающая (незафиксированная) транзакция в другом сеансе?

Shnugo 05.03.2019 08:39

Это все еще воспроизводимо? Если нет, то, возможно, ожидающая транзакция, как упомянул Schnugo, или что-то еще блокировало выполнение, например, автоматическое обновление статистики.

Alexander Volok 05.03.2019 09:22

Я попытался использовать синтаксис BETWEEN, и поведение было таким же.

Yutha 05.03.2019 10:31

Что меня беспокоит, так это то, почему запрос возвращает результаты для диапазона дат, который составляет, скажем, 15 дней, а не для диапазона меньше этого. Я использую выпуск SQL Server Express. Может быть, это бизнес-уловка, чтобы заставить меня купить лицензию (надеюсь, MS как компания не такая дешевая). Отчет о состоянии — это просто таблица с несколькими тысячами записей. У меня есть графический интерфейс, чтобы получить результат в соответствии с выбором даты. Но дело в том, что в редакторе запросов только я сталкиваюсь с этой проблемой. Никаких других параллельных обновлений в таблице не происходит.

Yutha 05.03.2019 10:35

Возвращает ли 'dbcc checkdb' какие-либо ошибки?

J.R. 05.03.2019 11:28

Это не дало никакой ошибки

Yutha 06.03.2019 12:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
13
61
0

Другие вопросы по теме