|
|
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
Добрый вечер ! Господа помогите советом. Не получается оптимизировать запрос c left outer join, так чтобы не было full table scan (2 шт.) и cost был поменьше. имеются 2 таблицы (поля и констраинты не имеющие отношения к вопросу я выкинул) Код: 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Во второй таблице не обязательно будет содержаться запись соответствующая записи в первой, поэтому использую left (outer) join Мне нужно получить все записи (в объединении двух таблиц) значения поля version которых больше заданной. в таблицах десятки миллионов записей. интересно что если я заменяю left join на inner join от full table scan исчезает и cost становится маленьким, что бы могли посоветовать чтобы избавиться от Full table scan и снизить cost используя внешнее объединение ? Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 19:55 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
xserge, select T.Id from TableA T where T.Version > 1216913415 union select T.Id from TableA T inner join TableB Stq on Stq.Id = T.Id where (T.Version > 1216913415 or Stq.Version> 1216913415) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 20:25 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
йцукенqwertyxserge, select T.Id from TableA T where T.Version > 1216913415 union select T.Id from TableA T inner join TableB Stq on Stq.Id = T.Id where (T.Version > 1216913415 or Stq.Version> 1216913415) select T.Id from TableA T where T.Version > 1216913415 intersect select Stq.Id from TableB Stq where Stq.Version> 1216913415 union select T.Id from TableA T where T.Version > 1216913415 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2016, 20:29 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2016, 14:11 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
Это не эквивалентные запросы. Если на то пошло, нужно выбрать строки из "TableB" по условию "Version > 1216913415" и убедиться что такие "Id" есть в "TableA". Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2016, 14:22 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
Не угадалйцукенqwertyxserge, select T.Id from TableA T where T.Version > 1216913415 union select T.Id from TableA T inner join TableB Stq on Stq.Id = T.Id where (T.Version > 1216913415 or Stq.Version> 1216913415) select T.Id from TableA T where T.Version > 1216913415 intersect select Stq.Id from TableB Stq where Stq.Version> 1216913415 union select T.Id from TableA T where T.Version > 1216913415 C union all вместо union будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2016, 15:03 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
UpstreamC union all вместо union будет быстрее. сколько открытий чуднЫх... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2016, 15:07 |
|
||
|
Оптимизация запроса с left outer join
|
|||
|---|---|---|---|
|
#18+
UpstreamC union all вместо union будет быстрее. Это если вы не против задвоения данных в результате: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2016, 16:07 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39324028&tid=1887264]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 507ms |

| 0 / 0 |
