Прискорюємо формування звіту - Книга покупок
Отже, за допомогою відладчика була виявлена функція "ОтриматиДодатковуІнформаціюПоСФДляКнигиПокупок", що знаходиться в загальному модулі "Облік ПДВ" (або безпосередньо в модулі звіту, залежно від версії звіту). Ця функція запитом збирає дані щодо всіх номерів ВМД та країн походження товарів за списком документів, переданим як параметр. Запит складається з безлічі підзапитів по табличних частинах документів різних типів, об'єднаних через "ОБ'ЄДНАТИ ВСЕ" і в кожному з цих підзапитів повторюється одна єдина умова ". Таблиця Товарів.
Ось ця умова мене і збентежила. Адже, як відомо, умови з використанням "В" можуть працювати просто до непристойності довго, особливо, при великій кількості елементів у порівнюваному масиві.
Було вирішено трохи переробити це неподобство, використавши для зберігання списку документів проіндексовану тимчасову таблицю, а входження документа в цю таблицю відпрацьовувати через "ВНУТРІШНЕ З'ЄДНАННЯ". Тобто. текст проблемної умови фактично замінюємо на текст: ". ВНУТРІШНЯ З'ЄДНАННЯ ВТСсписокРахунківФактур ЯК СписокРахунківФактур ПО ТаблицяТоварів.Посилання = СписокРахунківФактур.РахунокФактура", де "СписокРахунківФактур" - це наша тимчасова таблиця.
Ось шматок коду, який перетворює вихідний запит:
Отже, результати вимірів продуктивності -
600 секунд до оптимізації запиту проти
4 секунд після (див. картинку в блоці скріншотів). Результати було отримано за кількості рядків у книзі покупок близько 15 000 . Наведено результат лише одного порівняльного виміру, хоча виміри робилися кілька разів для виключення факторавезіння :) Виміри були зроблені на "бойовому" середньозавантаженому SQL в робочий час і результати природно трохи відрізнялися. Незважаючи на всі застереження та прямолінійність методики тестування, можна досить впевнено констатувати, що прибуток від доробок досить відчутний.
- інформація, викладена вище, швидше за все, має сенс лише для досить великих баз або для формування книги за дуже тривалі періоди. Як згадувалося, у разі виміри робилися з прикладу книжки, що з порядку 15 000 рядків. На файлових базах не перевіряли.
- як піддослідний виступав звіт "Книга покупок за Постановою № 1137" (Бухгалтерія КОРП 2.0.46.5), але все викладене, швидше за все, застосовується і до інших версій звіту, в т.ч. з інших релізів. У всякому разі, у Бухгалтерії 3.0 проблемна функція залишилася незмінною.