Итак результаты измерений. В них участвуют следующие запросы:
Код: Выделить всё
0) Текущая реализация (план INDEX).
SELECT FIRST 1 Balance
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate <= :i_Date
PLAN (ACCARCH INDEX (ACCARCH_PK))
ORDER BY AccID DESC, OperDate DESC
1) Пожелание Attid убрать AccID из сортировки
SELECT FIRST 1 Balance, DBTurns, CRTurns
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate <= :i_Date
PLAN (ACCARCH INDEX (ACCARCH_PK))
ORDER BY OperDate DESC
2) Без явного указания плана
SELECT FIRST 1 Balance, DBTurns, CRTurns
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate <= :i_Date
ORDER BY AccID DESC, OperDate DESC
INTO o_Balance, o_DBTurns, o_CRTurns;
3) С планом ORDER вместо INDEX.
SELECT FIRST 1 Balance, DBTurns, CRTurns
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate <= :i_Date
PLAN (ACCARCH ORDER ACCARCH_PK)
ORDER BY AccID DESC, OperDate DESC
4) Без запроса. Хотелось посмотреть, сколько идет выборка самих счетов.
5) Вариант со сменой порядка сегментов. Возник, как непонимание. Проверяли, результата действительно не было.
6) Вариант, отработавший быстрее всего у WildSery.
SELECT FIRST 1 Balance, DBTurns, CRTurns
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate = (SELECT MAX(OperDate)
FROM AccArch
WHERE AccID = :i_AccID
AND OperDate <= :i_Date
PLAN (AccArch INDEX (ACCARCH_PK)))
PLAN (ACCARCH INDEX (ACCARCH_PK))
ORDER BY AccID DESC, OperDate DESC
После каждого измерения делался reconnect. Естественно, большая часть данных была в кэше RAID или файловом кэше. На интересность результатов это не влияло. Замеров было два. Один по филиалу с ~20k счетов. По отработавшим за разумное время на 20k доплнительно проверили на ~700k счетов. Помеченных звездочкой мы не дождались. Оборвали генератором. Чтения приводятся по анализу производительности. И да, во втором методе показало десять чтений из архива.
Код: Выделить всё
Метод Время выполнения Чтения из
(милисекунд) AccArch
0 1563 20759
1 19015 * 579380
2 111719 * 10
3 1609 20759
4 922 0
6 54484 * 693565
Далее замеры на филиале с ~700k счетов.
Код: Выделить всё
Метод Время выполнения Чтения из
(милисекунд) AccArch
0 70156 767449
3 24266 767449
4 10609 0
Выводы.
1) Возможно, я ошибаюсь насчет того, что именно работает медленно. Вклад простого чтения счетов всё таки не пустой.
2) То, что план ORDER для организации Антона лучше, подтверждается. Сегодня попробуют его на рабочей. Но то, что в другом случае построение баланса в таком варианте не заканчивалось, тем не менее не могу считать опровергнутым. Было ж ведь.