|
|
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, уважаемые коллеги! Oracle EE 11.2.0.4.1 Приведу упрощенный пример. Есть вьюха (несколько миллиардов строк). Имеем вот такой запрос к вьюхе, работает без проблем (IRS) Код: plsql 1. 2. 3. 4. 5. 6. Код: 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. далее вставляем подзапрос (и появляется IFFS) Код: plsql 1. 2. 3. 4. 5. 6. 7. Код: 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. Видим, что появился фильтр. Лечим его хинтом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: 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. далее пробуем расширить условие: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Код: 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. и получаем вовсе FTS. Что только не перепробовал - не могу добиться IRS, если в условии IN несколько значений. Писать PL\SQL под это хозяйство не хотелось бы. Пробовал в частности старый добрый WITH (c materialize) и в связке с Cardinality, No_unnest. Ничего не помогает. Может есть какие-нибудь идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 00:17 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
samatom, да не надо упрощать в таких ситуациях, а надо сразу полностью все рассказывать и показывать. Например, на моем тест-кейсе все работает ок: ddl Код: 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. результат Код: 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. PS. только не совсем верно план предикаты показывает, но не суть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 01:49 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
samatom Код: plsql 1. 2. Код: plsql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2016, 08:03 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
xtender, xtenderPS. только не совсем верно план предикаты показывает, но не суть... Что не верно? "1" alias поля из subquery с dual, все в порядке. Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 04:21 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
То, что у ТС 1M секций в каждой таблице никто не обратил внимания? Сдается мне, трудновато это прожевать оптимизатору. А если там еще и глистограммы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 04:53 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, power(2,20)-1 для interval типично. Код: 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. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 05:37 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
SeaGatepower(2,20)-1 для interval типично. Спасибо, не знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 05:44 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
Elicsamatom Код: plsql 1. 2. Код: plsql 1. ?Спасибо, но, к сожалению, не помогает. =( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 10:25 |
|
||
|
Не получается добиться Index Range Scan, может кто подскажет
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровТо, что у ТС 1M секций в каждой таблице никто не обратил внимания? Сдается мне, трудновато это прожевать оптимизатору. А если там еще и глистограммы... По-видимому так и есть - выяснили, что оптимизатору тяжело пушить предикаты к таблицам сквозь сложные вьюхи (в оригинальном запросе задействованы вьюхи с уровнем вложенности 2 и 3). Как только убираем вьюхи и вставляем вместо них таблицы - получаем желанные IRS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2016, 12:05 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39369084&tid=1886790]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
19ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 285ms |

| 0 / 0 |
