Сильное падение производительности сервера
База прыжком не увеличивалась. Обычно, раз в год, добавляется около 1 млн. записей. Потом немного "обвески" (около 500 тыс.). И это все. Далее идут апдейты. Причем, после добавления записей, я всегда делаю backup/restore.
Первый запрос можно и по натуралу прогнать. Даже быстрее работает, сегодня проверял. Но все равно, очень медленно!
Первый запрос можно и по натуралу прогнать. Даже быстрее работает, сегодня проверял. Но все равно, очень медленно!
Твой вариант хорош и способствует взращиванию в вопрошающем алгоритмиста. Но я бы таки советовал ему и разобраться зачем нужны индексы и как они используются. Скажем, я почти уверен, что если форсировать во внутреннем запросе 5-й индекс, а не третий, то это существенно улучшит ситуяйцию и в его варианте. А если вторым сегментом всунуть в этот индекс между CUSTOMER_ID и DOC_ID дату, то вообще мухой полетит.WildSery писал(а):Ты мой вариант пробовал?
Обратите внимание на порядок столбцов в индексе
Здесь в плане запроса нужно указать индекс DOC_HIS2, будет работать быстрее - сравните до изменения и после, не поленитесь.
в процедуре CLEAR_DOC_HISTORYДмитрий писал(а):Код: Выделить всё
CREATE UNIQUE INDEX DOC_HIS1 ON DOC_HISTORY (DOC_ID, CUSTOMER_ID); CREATE INDEX DOC_HIS2 ON DOC_HISTORY (CUSTOMER_ID);
Ах вот ты где, Северный Олень!Дмитрий писал(а):Код: Выделить всё
FOR SELECT CUSTOMER_ID, DOC_ID FROM DOC_HISTORY WHERE (CUSTOMER_ID = :CUSTOMER_ID) AND ... ... ... PLAN (DOC_HISTORY INDEX (DOC_HIS1))
Здесь в плане запроса нужно указать индекс DOC_HIS2, будет работать быстрее - сравните до изменения и после, не поленитесь.
Да, сам заметил. В понедельник пробовать буду. Вообще-то надо этот индекс перестроить.fb.bird писал(а):Обратите внимание на порядок столбцов в индексев процедуре CLEAR_DOC_HISTORYДмитрий писал(а):Код: Выделить всё
CREATE UNIQUE INDEX DOC_HIS1 ON DOC_HISTORY (DOC_ID, CUSTOMER_ID); CREATE INDEX DOC_HIS2 ON DOC_HISTORY (CUSTOMER_ID);
Ах вот ты где, Северный Олень!Дмитрий писал(а):Код: Выделить всё
FOR SELECT CUSTOMER_ID, DOC_ID FROM DOC_HISTORY WHERE (CUSTOMER_ID = :CUSTOMER_ID) AND ... ... ... PLAN (DOC_HISTORY INDEX (DOC_HIS1))
Здесь в плане запроса нужно указать индекс DOC_HIS2, будет работать быстрее - сравните до изменения и после, не поленитесь.
Чего несёшь-то? DOC_HIS5 будет однозначно быстрее чем DOC_HIS2.fb.bird писал(а):Ах вот ты где, Северный Олень!
Здесь в плане запроса нужно указать индекс DOC_HIS2, будет работать быстрее - сравните до изменения и после, не поленитесь.
А самый быстрый выбор в этом запросе будет по индексу (CUSTOMER_ID, DOC_DATE, DOC_ID), как уже намекнул Мерлин.
Описанного в статье мне хватило для понимания.