|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Добрый день, никак не могу заставить использовать конкатенацию или inlinst iterator для хорошо селективного запроса, но с индексным доступом SKIP SCAN. Как форсировать SKIP SCAN и конкатенацию хинтом? Версия: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Тестовый пример: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Запрос по 1 значения - skip scan: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
По 2 значениям - full scan: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
С хинтом USE_CONCAT тоже самое: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 12:15 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Похоже, сломали что-то в 10.2. В 10.1 ещё работало, но опять же надо форсить хинтом. Я лично склонен считать это багом, т.к. в случае ниже skip scan явно выгоднее и по стоимости и по производительности. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 17:18 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander Anokhin, это уже чтото, но все равно слабо рабочий вариант из-за alter session если прописать хинт в запросе, то concatenation все равно не срабатывает: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 17:37 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Да, видел. Почему хинт не работает не знаю. Могу предположить, что хинт OPT_PARAM проверяется позже, чем USE_CONCAT, но это как-то сомнительно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2019, 17:50 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander Anokhin, ну у оптимизатора в тестовом примере стоимость конкатенации больше получается на 1, т.е. если ручками переписать запрос на Код: plsql 1. 2. 3.
то в плане будет конкатенация, но стоимость на еденичку выше, чем у фулскана (10 против 9) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2019, 19:15 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Вот такой должен хинт быть Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Можно было и раньше догадаться, он в аутлайне был. С 12.2 работает новый or expansion, новый хинт OR_EXPAND. Как его с этим примером подружить не нашёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2019, 19:32 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#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. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2019, 20:14 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Melkomyagkii_newbi, не хочу тебя расстраивать, но это Index Full Scan :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2019, 21:21 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander Anokhin, спасибо, на 18 тоже работает ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 10:33 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander AnokhinMelkomyagkii_newbi, не хочу тебя расстраивать, но это Index Full Scan :-( и правда, обман чтобы набрать классы прям какой-то( ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 16:33 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander AnokhinВот такой должен хинт быть И что ты считаешь INDEX SKIP SCAN + TABLE ACCESS BY INDEX ROWID BATCHED выполнeнный дважды (один в поисках id = 1 второй в поисках id = 2) а затем CONCATENATION подразумевающий SORT/HASH лучше: Код: 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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 18:15 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
SY, лучше. там действительно практически фулл скан получается. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Код: 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.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 18:37 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Ну да, считаю. Этот Index Full Scan предполагает изменить моё мнение как-то ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 18:38 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
А, ну ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 18:39 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander AnokhinНу да, считаю. Этот Index Full Scan предполагает изменить моё мнение как-то ? И где ты видишь INDEX FULL SCAN??? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 19:10 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Вот всё возьми да расскажи! Тут тебе надо подумать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 19:17 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
SYИ где ты видишь INDEX FULL SCAN???Видишь access? Что скипает такой skip scan?? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 19:41 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
-2-SYИ где ты видишь INDEX FULL SCAN???Видишь access? Что скипает такой skip scan?? Теперь вижу. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2019, 20:33 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
Alexander AnokhinС 12.2 работает новый or expansion, новый хинт OR_EXPAND. Как его с этим примером подружить не нашёл.хз что там за правила проверки - при нормальном id in (1,2) не работает (ORE: bypassed - No valid predicate for OR expansion.), но вот дурацкое добавление исправляет ситуацию: Код: 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.
только не смог придумать как такое же провернуть с IN ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 03:03 |
|
INDEX SKIP SCAN и Concatenation
|
|||
---|---|---|---|
#18+
xtenderAlexander AnokhinС 12.2 работает новый or expansion, новый хинт OR_EXPAND. Как его с этим примером подружить не нашёл.хз что там за правила проверки - при нормальном id in (1,2) не работает (ORE: bypassed - No valid predicate for OR expansion.), но вот дурацкое добавление исправляет ситуацию: Класс, теперь понятнее. Такая проверка нужна для переменных (bind или в случае соединений), когда значения зараннее не известны, чтобы одни и те же строки несколько раз не вытащить. И старый добрый or expansion (concatenation) умеет добавлять эти дополнительные условия, а для нового этот шаг преобразований забыли добавить, похоже. В результате для нового or expansion валидным считается только такой "or" где непересечение значений явно прописано и для литералов и для переменных. Код: 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.
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2019, 15:31 |
|
|
start [/forum/topic.php?fid=52&fpage=63&tid=1881934]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 265ms |
total: | 411ms |
0 / 0 |