powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / YEAR and MONTH оказывается получше, чем прямое сравнение по датам
18 сообщений из 18, страница 1 из 1
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773339
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не то чтобы вопрос жизни и смерти, но концепция что SARGable, а что нет прям у меня на глазах рушится. Наверно давно планы не отлаживал или какой твиттер упустил.

Предикаты распарились в DATEPART и индекс был успешно заюзан.
Для доп. анализа вот еще
Код: sql
1.
2.

(54429 rows affected)
Table 'RETURNED_ITEM_2'. Scan count 5, logical reads 169985, physical reads 1514, read-ahead reads 6626, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 1140 ms, elapsed time = 1231 ms.
CPU time = 0 ms, elapsed time = 0 ms.

(54429 rows affected)
Table 'RETURNED_ITEM_2'. Scan count 5, logical reads 11525, physical reads 1, read-ahead reads 11646, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

SQL Server Execution Times:
CPU time = 593 ms, elapsed time = 1248 ms.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773343
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема индекса не раскрыта. Но, подозреваю, сервер не дурак, чтобы делать range scan по индексу и лукапиться в кластерник за недостающими полями.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773346
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiYEAR and MONTH оказывается получше, чем прямое сравнение по датам
Ну да, 170к разных чтений гораздо лучше, чем 11к.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773359
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Обычный индекс по полю datetime (да, дамп базы из 2005 года)
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773363
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый план ужасный.
Второй план лучше: чтений на порядок меньше, и, возможно, под вашу структуру он и идеален.

Хотите seek -- делайте индекс, который вам советует сервер. Хотите seek без изменения структуры -- сделайте forceseek и сравните кол-во чтений со вторым вариантом.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773383
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

второй запрос будет вообще идеально работать, если построите кластерный по дате.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773386
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiНе то чтобы вопрос жизни и смерти, но концепция что SARGable, а что нет прям у меня на глазах рушится. Наверно давно планы не отлаживал или какой твиттер упустил.

стопудово пропустили. был такой твиттер про отличие index seek от index scan.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773397
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dawGlebanskiНе то чтобы вопрос жизни и смерти, но концепция что SARGable, а что нет прям у меня на глазах рушится. Наверно давно планы не отлаживал или какой твиттер упустил.

стопудово пропустили. был такой твиттер про отличие index seek от index scan.
и как связан ваш "комментарий" с вопросом?
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773400
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

Добавьте к своим запросам option (maxdop 1) и сравните еще раз. Либо сравнивайте CPU time, а не elapsed.
К тому же, неплохо бы исключать затраты на передачу данных клиенту.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773419
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Эффекта нет, да и это база на моем лэптопе.
Весь вопрос скорее в том, что может кто знает, почему SQL Server пытается через datepart насильно индекс попользовать.
Может быть какой программист подумал "а что это у нас клиенты жалуются, что MONTH и YEAR не используют индекс по дате? давай ка выкатим апдейт и покажем им, что мы умеем умно запросы парсить" :D
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773425
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanskiinvm,

Эффекта нет, да и это база на моем лэптопе.
Весь вопрос скорее в том, что может кто знает, почему SQL Server пытается через datepart насильно индекс попользовать.
Может быть какой программист подумал "а что это у нас клиенты жалуются, что MONTH и YEAR не используют индекс по дате? давай ка выкатим апдейт и покажем им, что мы умеем умно запросы парсить" :D
а где тут datepart? MONTH и YEAR детерминистические функции, и их индекс может использовать...
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773429
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiЭффекта нетКонечно нет. Это наглядно видно по CPU time в показанном вами результате.
Glebanskiда и это база на моем лэптопе.В этом случае нету затрат на передачу данных клиенту?
GlebanskiВесь вопрос скорее в том, что может кто знает, почему SQL Server пытается через datepart насильно индекс попользовать.Посмотрите на оценочное число строк для Index Scan и Clustered Index Scan.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773476
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВесь вопрос скорее в том, что может кто знает, почему SQL Server пытается через datepart насильно индекс попользовать

Меньше прогнозируемая стоимость.
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773541
Mike_za
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKdawпропущено...

стопудово пропустили. был такой твиттер про отличие index seek от index scan.
и как связан ваш "комментарий" с вопросом?

дак разве автор не упомянул SARGable?
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773542
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mike_zaTaPaKпропущено...

и как связан ваш "комментарий" с вопросом?

дак разве автор не упомянул SARGable?
это означает seek что ли?
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773555
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть теория, что планировщик, при виде Year и Month, полагает, что ему будет достаточно первых 3 байт из искомого поля для поиска и сравнения. И достать эти 3 байта из индекса выглядит как раз очень соблазнительной перспективой
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773608
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

А вас ни на секунду не смущает что первый план ожидает 1 строку, хотя на самом деле их возвращается 54429? Это одна из частых ошибок оптимизатора, и будь у вас побольше строк и посложнее план вообще все бы встало надолго. А когда во ктором случае сервер понимает с чем реально имеет дело, то решает просто просканировать кластерный, что оказывается намного дешевле, судя по вашим же цифрам.

Вы короче два раза нагибаете сервер:
1. Сначала из-за YEAR and MONTH он не может оценить количество строк и строит ущербный план.
2. А потом "индекс был успешно заюзан". Успешно, это когда поиск по индексу, у вас скан. А почему? Потому что не SARGable!
...
Рейтинг: 0 / 0
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
    #39773631
Mike_za
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

А что это означает?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / YEAR and MONTH оказывается получше, чем прямое сравнение по датам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]