Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / YEAR and MONTH оказывается получше, чем прямое сравнение по датам / 18 сообщений из 18, страница 1 из 1
13.02.2019, 13:53
    #39773339
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
Не то чтобы вопрос жизни и смерти, но концепция что 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
13.02.2019, 13:55
    #39773343
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
Тема индекса не раскрыта. Но, подозреваю, сервер не дурак, чтобы делать range scan по индексу и лукапиться в кластерник за недостающими полями.
...
Рейтинг: 0 / 0
13.02.2019, 14:00
    #39773346
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
GlebanskiYEAR and MONTH оказывается получше, чем прямое сравнение по датам
Ну да, 170к разных чтений гораздо лучше, чем 11к.
...
Рейтинг: 0 / 0
13.02.2019, 14:08
    #39773359
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YEAR and MONTH оказывается получше, чем прямое сравнение по датам
Гавриленко Сергей Алексеевич,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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