|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
Всем привет. При использовании коррелированного подзапроса не получается протолкнуть stopkey. Ниже тест кейсы. Код: plsql 1. 2. 3.
ddl Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
test1 - TopN query Код: 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.
test2 TopN query + correlated subquery Код: 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.
В тесткейсе 1 - попытка выбрать строку из таблицы с максимальной датой в диапазоне, используя обратный порядок значений в индексе. Тут оптимизатор понимает, что от него хотят. A-Rows равно единице. В тетскейсе 2 - попытка сделать тоже самое, но добавив немного корреляции во FROM. Тут оптимизатор добавляет сортировку, в которую попадает весь пул строк. Где stopkey? Пропал IRS DESCENDING. Кто знает, как починить и протолкнуть stopkey в test2? P.S. Хинты index_desc и index_rs_desc не помогают. Они хоть и проставляют в план IRS DESCENDING, но A-Rows остается равным 50. SORT ORDER BY STOPKEY также не пропадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 00:04 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc, "TMP"."V"='string7' - one value "TMP"."V"="T"."V" - how many? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 00:44 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Но вообще надо быть осторожным с ROWNUM в LATERAL() - иногда это может привести к неправильным результатам из-за DCL (lateral view decorrelation): http://orasql.org/2019/02/16/lateral-view-decorrelationvw_dcl-causes-wrong-results-with-rownum/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 04:33 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
AlexFF__|, и там и там по 100 значений, но в кейсах участвуют выборки по 50 значений. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 09:10 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender, спасибо за ссылку, сейчас почитаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 09:12 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender Но вообще надо быть осторожным с ROWNUM в LATERAL() ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 09:12 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
AmKad, В моем случае fetch first 1 row only работает, как и rownum. Код: plsql 1. 2. 3. 4. 5. 6.
dbms_xplan Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 09:44 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc, Ты меня не понял, что бы сработал COUNT STOPKEY на INDEX RANGE SCAN DESCENDING, нужно определить диапазон в индексе, перейти на его конец и сделать шаг назад => получили то самое одно значение. Когда потенциальных значений несколько (а тебя именно такой случай, не смотря на одно реальное), oracle должен сделать выборки из нескольких потенциальных диапазонов, отсортировать их, и только потом применить на COUNT STOPKEY на первом/последнем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 11:45 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
AmKad xtender Но вообще надо быть осторожным с ROWNUM в LATERAL() mlc В моем случае fetch first 1 row only работает, как и rownum. rownum Код: 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.
fetch first Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:24 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender Код: plsql 1.
Блин, я как-то сразу не обратил внимание на второе поле в сортировке. Спасибо, что ткнул еще разок. Я так понял, что невозможно использовать STOPKPEY в IRS DESCENDING не сортируя оба поля desc, несмотря на то, что первое вроде как уже указано. Что в принципе вполне логично. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 17:46 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc, Ну и как я выше сказал, лучше добавить сразу хинт no_decorrelate, чтобы потом не приплыть к wrong results ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 18:33 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender, Че т вот не понял, как так вышло. В моем розовом мире IRS DESCCENDING + STOPKEY должен был помочь, ибо я ожидал от него, что будет прочитан максимум 1 листовой блок на один starts, но вставив lateral в рабочий запрос вышло еще хуже, чем было (а было inline view с max keep dense_rank): Было: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Стало: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Не могу понять почему при одинаковых starts = 11973 - количество прочитанных блоков с диска со stopkey больше, чем без него. Хотя я ожидал обратного эффекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 11:45 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc Код: plsql 1.
Показывай нормально полный запрос и планы со статистиками ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 12:24 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender У тебя тут декоррелированный латерал . Если не тяжело, то в двух словах что это такое? трансформация lateral в join? можно просто ссылку ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 12:33 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 14:01 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender, Спасибо, примерно так себе и представлял Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
не понял (туплю) откуда взялся VW_DCL_1B0973D4.item_2 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 14:28 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender, al_daily_rem_d - IOT c PK. lateral + order by Код: 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.
inline view + push predicate Код: 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.
lateral view + unique index 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. 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.
статистика таблицы al_daily_rem_d Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 13:23 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
Может ли кто-нибудь прояснить почему IRS DESCENDING + STOPKEY и LATERAL + INDEX UNIQUE SCAN при одинаковых starts поднимают разное количество блоков с диска? IRS DESCENDING + STOPKEY затратнее INDEX RANGE SCAN (MIN/MAX)? Чисто логически что первая, что вторая операция должны брать данные из крайнего листового блока и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 09:22 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
mlc, Сейчас некогда смотреть. Попробуйте пока в обратном порядке скрипты прогнать. Может у вас эффект сброса кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2020, 10:06 |
|
протолкнуть stopkey в коррелированный запрос
|
|||
---|---|---|---|
#18+
xtender, не думаю. Я перед каждым тестом flush buffer cache выполняю. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 10:47 |
|
|
start [/forum/topic.php?fid=52&fpage=42&tid=1881094]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 18ms |
total: | 162ms |
0 / 0 |