Використання логічного АБО в умовах запитів
1. Не слід використовувати АБО в секції ДЕ запиту. Це може призвести до того, що СУБД не зможе використовувати індекси таблиць і виконуватиме сканування, що збільшить час роботи запиту та ймовірність виникнення блокувань. Замість цього слід розбити один запит на кілька й об'єднати результати.
1. Не слід використовувати АБО в секції ДЕ запиту. Це може призвести до того, що СУБД не зможе використовувати індекси таблиць і виконуватиме сканування, що збільшить час роботи запиту та ймовірність виникнення блокувань. Замість цього слід розбити один запит на кілька й об'єднати результати.
Наприклад, запит
ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" ИЛИ Артикул = "002"
слід замінити на запит:
ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "001" |ОБЪЕДИНИТЬ ВСЕ |ВЫБРАТЬ Товар.Наименование ИЗ Справочник.Товары КАК Товар ГДЕ Артикул = "002"
2. Не рекомендується використовувати логічне АБО в умовах з'єднання, тобто в секції ЗА запиту. Це також може призвести до вибору неоптимального плану й повільної роботи запиту. Простого універсального способу переписати такий запит без використання АБО не існує. Слід проаналізувати розв'язуване завдання та спробувати знайти інший алгоритм його розв'язання.
Наприклад, неправильно:
ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО (ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ИЛИ ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул)
Правильно:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК НоменклатураСсылка,
ЗагружаемыйПрайсПоставщика.Цена КАК Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование
ОБЪЕДИНИТЬ
ВЫБРАТЬ
СправочникНоменклатура.Ссылка,
ЗагружаемыйПрайсПоставщика.Цена
ИЗ
ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура
ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул
ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗагружаемыйПрайсПоставщика.Цена КАК Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО ЗагружаемыйПрайсПоставщика.НаименованиеТовара = СправочникНоменклатура.Наименование ОБЪЕДИНИТЬ ВЫБРАТЬ СправочникНоменклатура.Ссылка, ЗагружаемыйПрайсПоставщика.Цена ИЗ ЗагружаемыйПрайсПоставщика КАК ЗагружаемыйПрайсПоставщика ВНУТРЕННЕЕ СОЕДИНЕНИЕ СправочникНоменклатура КАК СправочникНоменклатура ПО ЗагружаемыйПрайсПоставщика.АртикулТовара = СправочникНоменклатура.Артикул
3. Якщо в конфігурації описано кілька ролей із різним обмеженням доступу на рівні записів (RLS), то не слід призначати одному користувачеві більше ніж одну таку роль. Якщо одного користувача буде включено, наприклад, до двох ролей із RLS — бухгалтер і кадровик, то під час виконання всіх його запитів до їхніх умов додаватимуться умови обох RLS із використанням логічного АБО. Таким чином, навіть якщо у вихідному запиті немає умови АБО, вона з'явиться там після додавання умов RLS. Такий запит також може виконуватися неоптимально — повільно й із надмірними блокуваннями.
Замість цього слід:
- Переглянути склад ролей таким чином, щоб до одного об'єкта метаданих надавала доступ лише одна роль (на читання, запис тощо);
- За потреби розробки кількох ролей, що надають доступ до одного