Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
Всем привет! Имеется большой запрос, который очень требует оптимизации. Ниже пример части запроса, на которой подвисает. В реальных таблицах десятки миллионов строк данных. Пробовала переписать и в JOIN, и в CTE, но из-за аггрегатных функций и мудреных условий, толково это сделать не удалось. Не увенчались успехом и манипуляции с индексами, тк особого опыта в оптимизации не имею Код: sql 1. 2. 3. 4. 5. 6. 7. Также прикрепляю Execution plan Может у кого-то есть идеи в какое русло вообще двигать все это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 19:23 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 19:23 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
Valentina.YuМожет у кого-то есть идеи в какое русло вообще двигать все это?Вообще то никаких условий в запросе нет, поэтому должны просканироваться все участвующие таблицы, и во всем строкам сделаны вычисления. Это будет небыстро, в любом случае. А так - делать индексы по колонкам, участвующим в связях, делать include-индексы, может, получится использовать индексированные представления для агрегатов. PS Кстати, у вас условие (SELECT COUNT(*) FROM tab1 AS p1 WHERE tab1.col4 = p1.col4) = 0) всегда ложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 20:51 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
alexeyvgPS Кстати, у вас условие (SELECT COUNT(*) FROM tab1 AS p1 WHERE tab1.col4 = p1.col4) = 0) всегда ложно. И, как следствие, второй подзапрос Код: sql 1. тоже бесполезен. Можно убрать. Вот и оптимизировали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2018, 18:19 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
Эквивалент исходного запроса Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2018, 18:24 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
aleks222И, как следствие, второй подзапрос Код: sql 1. тоже бесполезен. Можно убрать.Хм, а почему это? Вы не спутали tab1.col3 и tab3.col1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 13:55 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. Код: sql 1. 2. Код: sql 1. 2. 3. Код: sql 1. 2. 3. Код: sql 1. 2. 3. Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 14:21 |
|
||
|
Оптимизация SQL запроса с коррелированными подзапросами
|
|||
|---|---|---|---|
|
#18+
aleks222 Код: sql 1. 2. 3. Код: sql 1. 2. 3. Всё равно не понял, почему tab2.col1 = 0 всегда FALSE? Если бы tab2.col1 имел тип BIT, то tab2.col1 = 0 было бы всегда TRUE, потому что выше tab2.col1 <> 1 Но его тип неизвестен, и уж тем более выражение не FALSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2018, 15:37 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39702984&tid=1689108]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 356ms |

| 0 / 0 |
