|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
есть таблица sales партиционнированная по полю sale_date во многих местах программ используется такой (или поожий) select Код: plsql 1. 2. 3.
в какойто момент понадобилось убрать текстовые поля из sales. заменив таблицу представлением. Создана таблица sales_2 и представление: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
sales_2 - также партиционирована по sale_date так вот весь программный код, работавший секунды, при выборке select max(sale_date) теперь работает очень долгое время. причем вьюха сама по себе не причем select from select - если во внутреннем селекте есть джоин, а в наружнем ограничение на партиционированное поле - работает медленно. никаким хинтом не удалось это исправить. Буду благодарен любому совету. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 21:40 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
bhr, А чего еще ты ожидал? Была одна таблица. Из нее дергали max(sale_date). Oracle лезв индекс и быстро выдавал результат. Тепеь ты дергаешь max(sale_date) из view которое вначале джойнит а только потом ищет max(sale_date) среди результата джойнаа, т.е. сортирует a не через индекс. Конечно в принципе optimizer мог бы сообразить что ищем max(sale_date) таблицы которая в left outer join слева и поx...рить left outer join. Но ведь у программиста тоже должна быть соображалка. Делай selec max(sale_date) from sales_2. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 21:59 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
SY optimizer мог бы сообразить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:06 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
bhr, Странно прицепить к таблице еще две и ожидать что поведение запроса не изменится. План выполнения запроса из view что показывает? Есть ли индексы по полям agent_id и product_id в таблице sales_2? Есть ли индексы в таблице agent по полю agent_id? Есть ли индексы в таблице product по полю product_id? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:07 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
-2- SY optimizer мог бы сообразить дык... лефт джоин ведь не отфильтрует строки. индексов нет ни в одной таблице sales - огромная таблица две другие - по тыще строк имеют проверяю вашу версию: Код: plsql 1. 2. 3. 4. 5. 6.
тоже тормозит то есть попытки хинтом inline помочь ораклу заведомо провальны очень хочется получить в плане выполнения: PARTITION RANGE ALL MIN/MAX ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:27 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
flexgen bhr, Странно прицепить к таблице еще две и ожидать что поведение запроса не изменится. План выполнения запроса из view что показывает? Есть ли индексы по полям agent_id и product_id в таблице sales_2? Есть ли индексы в таблице agent по полю agent_id? Есть ли индексы в таблице product по полю product_id? в первом случае план выполнения показывает partition range all min/max во втором случае partition range all ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:30 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
похоже, тупик... все запросы с предикатом sale_date > t1 работают норм. а вот max - полная засада. и неизвестно в скольких местах и кем такие max - используются.... делать вычисляемое поле тоже не фонтан. должно быть какое-то простое решение. Задачка-то на вид стандартная. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:46 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
bhr, Отфильтровать не могут, но могут размножить. Сделайте внешние ключи и тогда должен сработать join elimination. А вообще лучше сразу приводите трассу 10053 при таких вопросах ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 00:35 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
bhr, простой пример: DDL Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
план Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 01:20 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
bhr то есть попытки хинтом inline помочь ораклу заведомо провальны ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 01:23 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
xtender bhr, Отфильтровать не могут, но могут размножить. Что не изменит значение max(sale_date). SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 02:58 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
SY Что не изменит значение max(sale_date). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 03:29 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
xtender Уникальность не выполняется - Join elimination не будет выполнен. A мог бы для GROUP BY с уникальность независимыми агрегациями min/max, count(distinct), ... SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 03:38 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
SY, С этим помогает только group-by placement. Дело в том, что трансформации работают по кусочкам, по query block за раз. Соответственно, на этапе JE он тупо может не знать, что с этим qb будет происходить далее, есть ли дальше group-by. Конечно, по идее, если бы gby-placement отработал раньше и создал инлайн вью с группировкой, и только потом запустил бы JE, тогда бы он сработал и лишние джойн исчезли. Но это сложно слишком ради мизерного процента таких запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 04:13 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
И в любом случае, group-by placement тоже требует уникальности. Размножение или фильтрация строк его блокирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 04:16 |
|
select max партиционнированного поля - из таблицы и из view. из view - очень медленно
|
|||
---|---|---|---|
#18+
xtender bhr, простой пример: DDL Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
план Код: 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.
ЙЕЕЕССС... огромное спасибо.... форум очень полезная штука создал primary key по справочникам. индекс не создавал. все залетало. Это просто праздник какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 11:09 |
|
|
start [/forum/topic.php?fid=52&msg=39929185&tid=1881533]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 419ms |
0 / 0 |