|
|
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Народ, возможно ли? План запроса при одной таблице хороший - берётся индекс по CONNECTOR_CODE и CREATED, из него вычитывается первая тысяча о возвращается (общее кол-во строк удовлетворяющее условию - 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. Но нужно сделать две таблицы через unon all, и stopkey не прокидывается внутрь. Хотя в принципе разумно было бы выбрать из каждой таблицы по 1000 строк отсортировать из и отдать первую тысячу? Возможно ли заставить оптимизатор это сделать? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2018, 19:24 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Takurava, была такая задача лет 5 назад: как тогда CBO с этим не справлялся, так и сейчас не умеет. Единственное, с чем стало получше - это параллельный union all, поэтому при небольшой модификации (добавление order by) можно добиться такого: тестовые таблицы Код: plsql 1. 2. 3. 4. 5. 6. PQ_CONCURRENT_UNION Код: 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. TakuravaХотя в принципе разумно было бы выбрать из каждой таблицы по 1000 строк отсортировать из и отдать первую тысячу?да, это наиболее простой вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 02:50 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Takurava Но нужно сделать две таблицы через unon all, и stopkey не прокидывается внутрь. Хотя в принципе разумно было бы выбрать из каждой таблицы по 1000 строк отсортировать из и отдать первую тысячу? Возможно ли заставить оптимизатор это сделать? а если в таблице меньше 1000записей? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 08:32 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Stax а если в таблице меньше 1000записей? сморозил, без разницы ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 08:38 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
TakuravaНо нужно сделать две таблицы через unon all, и stopkey не прокидывается внутрь.stopkey проталкивается внутрь - у тебя в плане rows=1000 по каждой таблице. Не проталкивается сортировка, так как она по объединенному набору записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 09:26 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
-2-TakuravaНо нужно сделать две таблицы через unon all, и stopkey не прокидывается внутрь.stopkey проталкивается внутрь - у тебя в плане rows=1000 по каждой таблице. Не проталкивается сортировка, так как она по объединенному набору записей. імхо без сортировки нет смысла проталкивать 1000 (сортировка есть с использованием индекса) ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 09:55 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Takurava, А если так заморочиться? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. сейчас нет под рукой базы, проверить план, но чем черт не шутит ну и в 12-м появился FETCH FIRST и выглядеть это будет как-то так (ну и тоже не могу сейчас проверить ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 10:01 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, в 12 можно так еще попробовать, может и не будет вычитывать все записи Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 10:15 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, Takurava хочет чтоб ето сделал оптимизатор, а он етого пока не делает, хотя в плане намеки (Rows) есть ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 10:26 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:58 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous http://www.sql.ru/forum/297664/optimizator-pobezhdaet автор -- Умный оптимизатор отбирает в каждой просматриваемой секции -- индекса не более N записей. Очень логично и замечательно работает. для себя я так понял для union all оптимизатор 11-ки еще не совсем умный и не проталкивает rownum <= 1000, хотя в плане Rows=1000 завтра на livesql поробую, там уже 18-я версия ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 17:39 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, ну твоя проблема в 12.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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 18:20 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
В общем печально, но будем ждать: Staxзавтра на livesql поробую, там уже 18-я версия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 19:15 |
|
||
|
Прокинуть stopkey внутрь unnion all
|
|||
|---|---|---|---|
|
#18+
Takurava, на тесте Код: plsql 1. 2. 3. 4. 5. 6. 7. pезультат 18-й аналогично 11-ке STOPKEY для каждой таблицы не проталкивается ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 10:42 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39648297&tid=1883953]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 552ms |

| 0 / 0 |
