|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
Здравствуйте! Кто может прокомментировать такую странную ситуацию. Есть пухлая таблица со статистикой измерений некоторой величины, там фактически три столбца: ID (int), CreateDate (datetime2), Value (float). Для анализа я делаю выборку во временную таблицу двумя способами: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Чудеса заключаются в том что способ 1 работает на порядок дольше способа 2. Почему так? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 17:58 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
Надо сравнивать планы исполнения в обоих случаях. Очевидно, с параметрами в условиях не используется индекс по полю CreateDate, а когда даты вставляются непосредствпнно, идет чтение индекса и все работает быстро. Такое часто бывает, когда запускаешь код в SSMS. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 18:31 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
JMLabs, Компилируется каждый раз запрос с переменными. Можно сделать STORED PROCEDURE с двумя параметрами и обращаться к ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 19:01 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
JMLabs, '29.01.2022 00:00:00' неправильно, кстати, надо '20220129 00:00:00'. Быстрее потому, что разные планы выполнения запросов. Если используется переменная, то её значение неизвестно и оптимизатор не может использовать статистику и индекс, если такой имеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 01:37 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
Владислав Колосов JMLabs, '29.01.2022 00:00:00' неправильно, кстати, надо '20220129 00:00:00'. Быстрее потому, что разные планы выполнения запросов. Если используется переменная, то её значение неизвестно и оптимизатор не может использовать статистику и индекс, если такой имеется. Индекс может. Но индекс у страдальца по CreateDate, к бабке ходить не надо. Не может оценить число строк выборки и решает, что сканирование дешевле лукапа кластерного. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 11:04 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
Спасибо всем откликнувшимся, но что посоветуете сделать? Действительно, работаю в студии но не в SSMS а в dbForge и хочу чтобы даты были переменными. Я не большой специалист в SQL, план исполнения, например, не знаю как посмотреть, но я вижу что создан индекс, но только по столбцу Value а не по CreateDate. Может быть в этом дело? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:34 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
JMLabs, попробуйте в конец параметризированного запроса следующие варианты: 1) OPTION (RECOMPILE) 2) OPTION (OPTIMIZE FOR (@from='29.01.2022 00:00:00', @to ='30.01.2022 23:59:59')); ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:10 |
|
Почем выборка с датой в явном виде на порядок быстрее той же выборки но с переменными?
|
|||
---|---|---|---|
#18+
JMLabs Спасибо всем откликнувшимся, но что посоветуете сделать? Действительно, работаю в студии но не в SSMS а в dbForge и хочу чтобы даты были переменными. Я не большой специалист в SQL, план исполнения, например, не знаю как посмотреть, но я вижу что создан индекс, но только по столбцу Value а не по CreateDate. Может быть в этом дело? Во первых, там ишо кластерный индекс должон БЫ быть. А если его нет - надо создать кластерный индекс (CreateDate). И пребудет с тобой щастье... Ежели же он уже есть и ДРУГОЙ - надоть подумать... Особливо если все запросы сводятся к FROM dbo.Results WHERE CreateDate BETWEEN @from AND @to ЗЫ. Ибо в ОТСУТСТВИИ кластерного индекса или индекса по CreateDate описываемый спецэффект необъясним. Рази только у тя дата в 'СТРОКЕ' хранится... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:37 |
|
|
start [/forum/topic.php?fid=46&fpage=4&tid=1683882]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 169ms |
0 / 0 |