Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
возможна ли оптимизация Self-Join по ключу
|
|||
|---|---|---|---|
|
#18+
Есть табличные инлайн-функции, которые принимают в параметре дату актуальности и возвращают данные из основной таблицы и соединенных с ней таблиц с периодиками (первичный ключ = первичный ключ основной таблиц + дата). В общем суть в том, что обращаясь к такой функции и указывая дату мы получаем все необходимые столбцы, не задумываясь о том где именно они хранятся - в основной таблице или периодиках. Довольно удобно и универсально, поскольку не нужно изменять кучу кода в случае если какой-то из столбов станет или не станет периодическим. Нужно будет поправить, только одну функцию. Иногда возникает необходимость запросить кроме актуальных данных еще и данные из столбца на дату, которая находилась в прошлом. В таком случае приходится делать соединение по первичному ключу (pk_id) этих 2х функций с разными параметрами: Код: sql 1. 2. 3. В плане запроса получается Self-Join основной таблицы самой с собой по первичному ключу. Т.е. если убрать все лишнее получается запрос: Код: sql 1. 2. 3. Вопрос: неужели sql server не может понять, что в таком запросе осуществляется соединение строки самой с собой и т.о. план запроса можно упростить до примерно такого: Код: sql 1. 2. Может быть можно как-то явно указать на необходимость оптимизации? Избавиться от такого двойного запроса к таблице можно убрав из функции основную таблицу и оставив только периодики, которые будут соединяться по параметру: Код: sql 1. 2. 3. Однако при такой схеме мы теряем универсальность запроса и получаем необходимость исправлять каждый раз весь подобный код при смене конфигурации периодик (перемещение столбца в/из периодику). Получается выбор между универсальностью кода и неоптимальность запросов. Можно ли как-то избежать компромисса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 15:17 |
|
||
|
возможна ли оптимизация Self-Join по ключу
|
|||
|---|---|---|---|
|
#18+
Сервер: Microsoft SQL Server 2014 (SP2-CU9) (KB4055557) - 12.0.5563.0 (X64) Dec 7 2017 01:00:06 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor) Клиентское приложение: SSMS v17.6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 15:23 |
|
||
|
возможна ли оптимизация Self-Join по ключу
|
|||
|---|---|---|---|
|
#18+
Код для получения плана запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2018, 15:43 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39639502&tid=1689806]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 379ms |

| 0 / 0 |
