Новости
- постулат перший «До реальних таблиць регістрів писати запити можна! Треба використовувати віртуальні...
- постулат другий «Використовуй індексування!»
- постулат третій «Не отримуй зайві поля!»
- замість висновку
- про автора
- PDF-версія статті для учасників групи ВКонтакте
З того самого моменту, як тільки «молодий» програміст 1С виходить за рамки самостійного пізнання платформи, на нього поступово починають сипатися обмеження: «Це роби так, а не десь!», «Так робити неправильно!», «Правильно робити так!» або «Так взагалі робити не можна!».
У той же час, якщо не дотримуватися цих правил, сама платформа 1С продовжує працювати і помилок не видає. Тому причина обмежень багатьом подвійно незрозуміла.
З плином часу у кожного програміста з'являються власні погляди на подібного роду твердження. Причому ці погляди можуть не збігатися з вихідними, але завжди підтверджені власним досвідом.
Давайте спробуємо розібратися в нав'язуваних постулатах, щоб зрозуміти - мають вони під собою підстави чи ні. Почнемо, припускаю, з самого популярного - з текстів запитів.
постулат перший
«До реальних таблиць регістрів писати запити можна! Треба використовувати віртуальні таблиці! »
Давайте уявимо, що в нашу базу даних приходить запит - знайти в таблиці всі необхідні символи для складання фрази «КУРСИ-ПО-1С».
«Ха!» - подумаєте ви, - «Простіше простого!».
А тепер уявіть себе на місці бази даних, і виконайте цей запит на нашій таблиці:
Малюнок 2. Приклад даних
Не знаю, як у вас, але у мене вже з другого рядка при послідовному читанні даних настає приблизно наступне стан:
Малюнок 3. Приклад результату послідовного читання
Воно і зрозуміло - таблиця містить в 9 разів більше символів, ніж нам необхідно. І все їх доводиться аналізувати на відповідність запиту. Але що, якщо б хтось дав нам якийсь «шаблон»:
Малюнок 4. Приклад шаблону обмеження вибірки даних
Який ми б могли поєднати з нашою таблицею і отримати наступний обсяг даних:
Малюнок 5. Приклад використання шаблону на конкретних даних
Нічого зайвого - тільки те, що необхідно!
Приблизно так само працюють і віртуальні таблиці. Платформа їх будує оптимальним чином з урахуванням заданих розробником параметрів (в нашому випадку шаблон - це аналог параметрів). Саме тому дуже важливо правильно заповнювати параметри віртуальних таблиць.
Так, при недостатній параметризації, може бути побудована віртуальна таблиця наступного вигляду:
Малюнок 6. Приклад використання шаблону з недостатніми обмеженнями
І знову доведеться обробляти зайву інформацію.
Зверніть увагу! Якщо у віртуальній таблиці не вказані параметри, то запит буде виконаний до реальної таблиці бази даних.
Виходить, що твердження «До реальних таблиць регістрів писати запити можна! Треба використовувати віртуальні таблиці! »Вірно в тому випадку, коли неможливо використання віртуальних таблиць, і ефективно працює, якщо правильно заповнені параметри віртуальної таблиці.
постулат другий
«Використовуй індексування!»
Ми вже спробували пошук шляхом послідовного читання кожного елемента нашої таблиці. А що, якщо провести певну сегментацію нашої таблиці? Чи поліпшить це пошук результату?
Давайте перевіримо це наступним чином: літери російського алфавіту розмістимо на жовтому тлі, цифри - на зеленому, а спеціальні символи - на блакитному. Букви латинського алфавіту при цьому залишимо без змін:
Малюнок 7. Приклад сегментації даних
Тепер при пошуку потрібних нам символів ми аналізуємо тільки осередки з певним кольором фону. Це дозволяє скоротити зону пошуку і обсяг оброблюваної інформації, що позитивно впливає на швидкість видачі результату.
Аналогічно працюють і індекси в «1С: Підприємство» - вся інформація ділиться на сегменти за певними ознаками і ця сегментація поміщається в окрему таблицю.
При необхідності здійснення пошуку по індексованих полю платформа спочатку виробляє оптимізовану вибірку по таблиці індексів, а потім переходить до обробки інформації з таблиці з даними тих рядків, які були знайдені за індексами.
Зверніть увагу!В реальності сегментація даних відбувається інакше - один елемент може потрапляти в кілька сегментів.Вся ця інформація міститься в окрему самостійну таблицю бази даних і кількість записів в ній може перевищувати кількість записів у вихідній таблиці в рази.
Тому настройка індексів виправдана тільки в тому випадку, коли ефект від їх використання вище, ніж витрати на створення і обслуговування окремої таблиці бази даних.
Виходить, що твердження «Використовуй індексування!» Має обгрунтування. Але також має багато нюансів, які необхідно враховувати. Це і обсяг індексованих даних, і взаємодія з іншими таблицями, і вид використовуваної бази даних.
Наприклад, якщо обробляється таблиця має невеликий обсяг даних, то індексування в цьому випадку буде негативно впливати на швидкодію.
постулат третій
«Не отримуй зайві поля!»
На відміну від попередніх двох тверджень, з цим не посперечаєшся. Просто не буває так, коли якесь зайве поле, отримане в результаті запиту, позитивно впливало б на функціонування 1С.
Упевнений, що зараз багато хто готовий крикнути в один голос - «Автор, ти пишеш прописну істину! Навіщо ?! ». Але стривайте! Напевно у вашому досвіді є випадки проведення рефакторинга коду запиту? А тепер зізнайтеся - хоч раз ви говорили собі щось на зразок «Не буду-ка я чіпати це поле, раптом воно десь використовується ...»?
І тут починається різноманіття факторів, що негативно впливають на продуктивність. Від банального збільшення обсягу результату запиту до вкладених запитів і зайвих з'єднань.
Тому завжди аналізуйте - яку інформацію вам необхідно отримати для вирішення конкретного завдання, і не ризикуйте заради думки «а раптом знадобиться».
замість висновку
У статті описана лише мала дещиця того, з чим стикається кожен програміст 1С в міру збільшення досвіду. І кожен вирішує самостійно, як поступати з новими твердженнями: використовувати як аксіому, розібратися в питанні і приймати зважене рішення або продовжувати робити так, ніби нічого й не чув.
Сподіваюся, даний матеріал допоможе комусь піднятися на чергову сходинку, а кому-то поміняти свій погляд на «вхідні догми».
PS А з якими «постулатами» стикалися Ви? Пишіть в коментарях - обговоримо! :)
про автора
Автор статті - Павло Ванін
м Володимир
E-mail: [email protected]
PDF-версія статті для учасників групи ВКонтакте
Ми ведемо групу ВКонтакте - http://vk.com/kursypo1c .
Якщо Ви ще не вступили в неї - зробіть це зараз, і в блоці нижче (на цій сторінці) з'являться посилання на скачування матеріалів.
Якщо Ви вже учасник групи - потрібно просто повторно авторизуватись в ВКонтакте, щоб скрипт Вас дізнався. У разі проблем рішення стандартне: очистити кеш браузера або підписатися через інший браузер.
А що, якщо провести певну сегментацію нашої таблиці?Чи поліпшить це пошук результату?
Навіщо ?
Напевно у вашому досвіді є випадки проведення рефакторинга коду запиту?
»?
PS А з якими «постулатами» стикалися Ви?