Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / TOP-100 на Oracle - performance / 1 сообщений из 1, страница 1 из 1
10.11.2002, 20:04
    #32066223
pvtl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TOP-100 на Oracle - performance
Вопрос у меня такой.
Предположим таблица 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? Т.е. не меняя сильно код который строит запрос, а лишь к примеру добавляя к построенному запросу хинты.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / TOP-100 на Oracle - performance / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]