|
|
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Добрый день, в проекте имеется запрос, который отрабатывает очень долго, если база больщая. Хотел бы его оптимизировать. Как видно - в запросе все вложенные селекты довольно похожи, отличаются обычно 1-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. 46. 47. 48. 49. 50. 51. 52. 53. Буду благодарен за наставления и советы. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 11:12 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Используйте средства разработки для вашей БД, чтобы составить и посмотреть план запроса. Может тупо индексов в базе не хватает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 11:16 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
zharenkov, Какая у вас СУБД? Попробуйте задать этот вопрос в ветке которая соответствует названию вашей СУБД на этом форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 11:44 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Уже вот это: Код: sql 1. 2. 3. 4. 5. 6. бредятина. 1. ANSI-соединение использует ON, а условие отбора (только) фильтрует результирующий набор; 2. В SQL - трёхзначая логика и должно быть IS NULL, а не ваша отсебятина; 3. Думать лень, но, обычно, агрегатные функции используют в колонках без всяких подзапросов. Лично мне, в своё время, помогло " Использование неявных и явных JOIN ". Хотя в соседнем топике указывают, что ANSI-соединения Oracle - глюкодром и баготрах. P.S. Если требуется самосоединение, то так и пишут: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 12:10 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
1) Код: plsql 1. выдаст результаты такие же, как c inner join, но со скоростью left join, поэтому убираем left 2) = NULL нельзя писать, надо IS NULL 3) избавиться от Kontroller k1 в подзапросах 4) вероятно, count в подзапросах можно посчитать за 1 проход используя case when, но это уже sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 12:24 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
По поводу сравнения на null и joinа без on - для EJB QL это нормально. База у меня постргессовская, вот так выглядит запрос, которым выцепляю данные из базы через squirell. Код: 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. Про иннер джоин хорошее замечание, с ним скрипт такой отработал менее чем за 2 секунды, а с лефтом за 3.5. Не совсем понятно, как в таком запросе избавиться от Kontroller k1 ибо по его полю идет join c табличкой gossrvc_doc_package. Тут не самосоединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 12:55 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
zharenkov, с выражением = null повезло, а вот <>null превратилось в is null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 13:09 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
zharenkov, насчет Kontroller k1: - в группировке стоит k.doc_package_id - в то же время подзапросы написаны так, что они не зависят от k.doc_package_id, а только от пользователя, для каждого k.doc_package_id на пользователе будут получены одни и те же результаты. Поэтому где-то лишнее, либо в группировке, либо в подзапросах. Правильный ответ зависит от того, что требовалось в задании ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 13:36 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
ivanra , спасибо, Вы правы. Не заметил, что у меня выводились только первые 100 записей выборки, расширил до 1000 и там куча одинаковых резльтатов, убрал группировку и их стало всего 44) Ради личного интереса - а в подзапросах как бы Вы поменяли, не трогая группировку по doc_package_id? Думал-думал и не придумал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 14:33 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
Если с группировкой по k.doc_package_id , то в подзапросах выкинуть Kontroller k1, соединение на верхний Kontroller k: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 14:46 |
|
||
|
EJB QL оптимизация запроса
|
|||
|---|---|---|---|
|
#18+
ivanra, понял, еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2014, 14:48 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=151&tid=2126245]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
234ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 552ms |

| 0 / 0 |
