|
|
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
Подскажите как решить данную проблему. Есть два практически идентичных запроса: Код: plaintext Код: plaintext Так вот во втором случае запрос выполняется моментально, в первом очень долго. План выполнения первого Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. второго Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. В чем разница планов я понимаю, меня интересует как заставить оптимизатор в первом случае сделать план запроса как во втором. Используется Oracle 11.2.0.4 SE. ps Нашел что-то подобное тут 19241726 , но решения там нет :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:20 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
EgorDS, Ты же понимаешь, что у тебя второй случай быстро выполнился именно для 663322731 и чем меньше будет это число, тем меньше разница с FTS? Но если очень хочешь " в первом случае сделать план запроса как во втором ", добавь хинт index ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:40 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
Забыл указать что USER_DD это view которая объединяет таблицы через union_all: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:42 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
AlexFF__|EgorDS, Ты же понимаешь, что у тебя второй случай быстро выполнился именно для 663322731 и чем меньше будет это число, тем меньше разница с FTS? Но если очень хочешь " в первом случае сделать план запроса как во втором ", добавь хинт index Число 663322731 получено функцией get_id, т.е. во втором варианте вместо вызова функции подставляется ее результат. hint index не подходит т.к. они имена index-ов разные иу разных таблиц, и во вторых в первом варианте идет начала union all и потом фильтр на значение, а во втором сначала выборка id>= 663322731 и только потом union all ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 13:46 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
EgorDS, Ну скушно тебе перечислять индексы, попробуй уменьшить стоимость их сканирования Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 14:22 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
EgorDS, подзапрос-то зачем втыкаете? оставьте одну функцию и не мучайтесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:49 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
в крайнем случае если уж хотите подзапрос оставить, то перенесите его во FROM - оттуда оптимизатор сможет его трансформировать как надо: Код: plsql 1. 2. 3. 4. 5. 6. или если у вас динамика, то лепите как-то так: Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:56 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
EgorDS, с оригинальным же запросом даже не мучайся, никакие хинты тебе не помогут его трансформировать в то что нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2018, 17:58 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
Я думаю причина появления подзапроса, что прочитано про subquery caching, но не понято, что он только в части select работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 10:25 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
xtenderEgorDS, подзапрос-то зачем втыкаете? оставьте одну функцию и не мучайтесь Моя вина, не указал что если оставить только функцию ничего не меняется - план такой же как и с запросом 1 в 1. Я так понимаю надо копать в сторону associate statistics: xtenderLeonid Kudryavtsev"Oracle умный" и вычислив обычные выражения, функцию и трогать не будетобычно по дефолту так и будет, т.к. оракл старается предикаты с функциями перемещать в конец всего FILTER 21165314 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2018, 11:41 |
|
||
|
Влияние функции на план запроса
|
|||
|---|---|---|---|
|
#18+
EgorDSМоя вина, не указал что если оставить только функцию ничего не меняется - план такой же как и с запросом 1 в 1 . Я так понимаю надо копать в сторону associate statistics: Код: 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 23:31 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39596632&tid=1884462]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 365ms |

| 0 / 0 |
