|
|
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Имеем запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Он аццки тормозит, независимо от того хинтую я индексы или нет. Но вот если перенести часть условия в Where то он начинает летать хотьв пане запроса идет Full Scan по interfacerecordstatus Что за ерунда? Надо статистику индексов пересобрать? Таблицы партицированные. Этот летает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:09 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Индексы: Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:16 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей, а план посмотреть слабо ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:17 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Могу только через PL/SQL Dev: Знаю что он кривой но все что есть... http://s020.radikal.ru/i721/1612/e5/c70776ebe38e.jpg http://s017.radikal.ru/i420/1612/e3/c009ed0606c2.jpg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:27 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей, за 10 лет не научился нормально показывать план запроса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:28 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей, Запросы не равнозначные, поэтому и планы и результаты (в общем случае) будут разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 10:42 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Жду админов, чтобы смотреть план обоих запросов. Код: plsql 1. авторSQL_ID 9m7787camwh4m, child number 0 begin :id := sys.dbms_transaction.local_transaction_id; end; NOTE: cannot fetch plan for SQL_ID: 9m7787camwh4m, CHILD_NUMBER: 0 Please verify value of SQL_ID and CHILD_NUMBER; It could also be that the plan is no longer in cursor cache (check v$sql_plan) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 11:51 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей, Код: plsql 1. так и пишешь ? facepalm но ответ тебе уже дали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 13:07 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
:-) Быстрый запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. dbms_xplan.displayPlan hash value: 2112472494 ------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 63 | 309K (1)| 01:01:57 | | | | 1 | SORT AGGREGATE | | 1 | 63 | | | | | |* 2 | HASH JOIN | | 1981 | 121K| 309K (1)| 01:01:57 | | | | 3 | PART JOIN FILTER CREATE | :BF0000 | 1612 | 35464 | 93 (0)| 00:00:02 | | | | 4 | PARTITION LIST ALL | | 1612 | 35464 | 93 (0)| 00:00:02 | 1 | 13 | |* 5 | TABLE ACCESS BY LOCAL INDEX ROWID| CTRANSACTIONS | 1612 | 35464 | 93 (0)| 00:00:02 | 1 | 13 | |* 6 | INDEX RANGE SCAN | CTRANSACTIONSI03 | 1857 | | 33 (0)| 00:00:01 | 1 | 13 | | 7 | PARTITION LIST JOIN-FILTER | | 7206K| 281M| 309K (1)| 01:01:56 |:BF0000|:BF0000| |* 8 | TABLE ACCESS FULL | INTERFACERECORDSTATUS | 7206K| 281M| 309K (1)| 01:01:56 |:BF0000|:BF0000| ------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("PARTITIONKEY"="PARTITIONKEY" AND "SERNO"="ROWSERNO") 5 - filter("STGENERAL"='POST') 6 - access("BATCHSERNO"=321356) 8 - filter("RECORDTYPE"='TRXN' AND "SYSTEMNAME"='online' AND "SYSTEMTYPE"='O') Медленный: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. dbms_xplan.displayPlan hash value: 4099375 ------------------------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | 63 | 309K (1)| 01:01:57 | | | | 1 | SORT AGGREGATE | | 1 | 63 | | | | | |* 2 | HASH JOIN OUTER | | 1981 | 121K| 309K (1)| 01:01:57 | | | | 3 | PARTITION LIST ALL | | 1612 | 35464 | 93 (0)| 00:00:02 | 1 | 13 | |* 4 | TABLE ACCESS BY LOCAL INDEX ROWID| CTRANSACTIONS | 1612 | 35464 | 93 (0)| 00:00:02 | 1 | 13 | |* 5 | INDEX RANGE SCAN | CTRANSACTIONSI03 | 1857 | | 33 (0)| 00:00:01 | 1 | 13 | | 6 | PARTITION LIST ALL | | 7206K| 281M| 309K (1)| 01:01:56 | 1 | 27 | |* 7 | TABLE ACCESS FULL | INTERFACERECORDSTATUS | 7206K| 281M| 309K (1)| 01:01:56 | 1 | 27 | ------------------------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("PARTITIONKEY"(+)="PARTITIONKEY" AND "SERNO"="ROWSERNO"(+)) 4 - filter("STGENERAL"='POST') 5 - access("BATCHSERNO"=321356) 7 - filter("RECORDTYPE"(+)='TRXN' AND "SYSTEMTYPE"(+)='O' AND "SYSTEMNAME"(+)='online') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 14:00 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей:-) Быстрый запрос: Медленный: Ты сравниваешь часы с трусами. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Как только ты в LEFT JOIN переносишь условие пo правой таблице из фрaзы ON в WHERE ты получаешь, в общем случае, другой результат. Поcему сравнивать планы бессмысленно. Посмотри на плaны - как только оптимизатор находит условие пo правой таблице в WHERE он х...рит OUTER ( HASH JOIN OUTER в "медленном" и HASH JOIN в "быстpом") что дает возможность использовать bloom filter (:BF0000) через PART JOIN FILTER в "быстpом" по сравнению с PARTITION LIST ALL в "медленном". Но все-это по-барабану ибо имеем два неэквивалентных SELECT. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 14:53 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
SYПоcему сравнивать планы бессмысленно сам план - да, но Predicate Information дает информацию для размышления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 14:59 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Ну да, все логично. Ну так а как мне написать именно с Left Join чтобы оно делало: PART JOIN FILTER? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 15:06 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров АндрейНу да, все логично. Ну так а как мне написать именно с Left Join чтобы оно делало: PART JOIN FILTER? Попробовать OUTER через UNION ALL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 15:41 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Понятно. Ну так по сути весь смысл партицирования таблиц убивается в Left Join чтоли? Как то это очень странно. >> HASH JOIN в "быстpом") что дает возможность использовать bloom filter (:BF0000) через PART JOIN FILTER в "быстpом" по сравнению с PARTITION LIST ALL в "медленном". Как то у меня не вяжется что скрещивание PARTITION LIST JOIN-FILTER и HASH JOIN OUTER не работает. Т.е. оптимизатор считает что если в partitionkey будет Null то придется сканить все партишены (даже если они в разных файлах или на разных дисках)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:09 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров Андрей, Inner join берет из левой только если есть совпадение с правой. Посeму можно отфильтровать partitions. Left join берет из левой даже если нет в правой. Посeму и фильтровать partitions через left join врядли получится. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:15 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Получится если поставить NVL :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:16 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Петров АндрейПолучится если поставить NVL :-) В oбщем случае это не эквивалентно: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:22 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
Я про Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:35 |
|
||
|
Условие в Left Join VS Where
|
|||
|---|---|---|---|
|
#18+
SY В oбщем случае это не эквивалентно: Ты можешь использовать NVL если поля s.recordtype, s.systemname и s.systemtype определены как NOT NULL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2016, 16:38 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39373130&tid=1886765]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
183ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 513ms |

| 0 / 0 |
