|
TOP-100 на Oracle - performance
|
|||
---|---|---|---|
#18+
Вопрос у меня такой. Предположим таблица Appointments имеет 450000 записей. Приведенный запрос выполняется 2 сек. SELECT * FROM ( SELECT A.Appt_Date zzzz FROM Appointments A ORDER BY zzzz DESC ) WHERE ROWNUM <= 100 А такой запрос выполнятеся уже 9 сек: SELECT * FROM ( SELECT A.Appt_Date zzzz, CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) <> 1) THEN 1 ELSE 0 END "1", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) = 1) THEN ' - done' ELSE '' END "2", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) = 1) THEN ' - done' ELSE '' END "3", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) <> 1) THEN 1 ELSE 0 END "4", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) = 1) THEN ' - done' ELSE '' END "5", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) = 1) THEN ' - done' ELSE '' END "6", CASE WHEN (DECODE(NVL(A.Activity, 0), 0, 0, -1) = 1) THEN ' - done' ELSE '' END "7" FROM Appointments A ORDER BY zzzz DESC ) WHERE ROWNUM <= 100 Тут видно, что на каждый CASE добавляется где-то по секунде времени выполнения. Естессно это обрезанный запрос. Настоящий запрос содержит множество полей и выполнятеся дольше и эти запросы генерятся автоматически программой. Можно ли как-то предотвратить такую деградацию performance? Т.е. не меняя сильно код который строит запрос, а лишь к примеру добавляя к построенному запросу хинты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2002, 20:04 |
|
|
start [/forum/topic.php?fid=52&tid=1992778]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
22ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 101ms |
0 / 0 |