Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация запроса RLS / 13 сообщений из 13, страница 1 из 1
12.08.2010, 12:19
    #36788000
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
Задача: ограничить через RLS доступ к справочнику контрагентов по реквизиту ГруппаДоступа ГруппаДоступа - элемент справочника ГруппыДоступа, права доступа прописаны для групп пользователей в регистре ПраваДоступаПользователей.

Написал следующий запрос в ограничения доступа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Контрагенты ГДЕ 
(Контрагенты.ГруппаДоступа В
  (ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПраваДоступаПользователей.ОбъектДоступа
  ИЗ
    Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
  ПО
    СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
      И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
      И СоставГруппы.Пользователь = &ТекущийПользователь)
  ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
  ИЛИ Контрагенты.ЭтоГруппа)

Подскажите, пожалуйста, как ещё можно оптимизировать данный запрос, на предмет скорости выполнения? Может по-другому организовать как-то?
...
Рейтинг: 0 / 0
12.08.2010, 12:46
    #36788079
vitkhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
Код: plaintext
Контрагенты.ГруппаДоступа В

Замени на соединение, будет быстрее.
...
Рейтинг: 0 / 0
12.08.2010, 14:24
    #36788415
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
vitkhvЗамени на соединение, будет быстрее.
Ага, спасибо, сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
		ПраваДоступаПользователей.ОбъектДоступа КАК ОбъектДоступа
	ИЗ
		Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
			ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
				И (ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа)
				И (СоставГруппы.Пользователь = &ТекущийПользователь)) КАК ГруппыДоступа
	ПО (Контрагенты.Ссылка = ГруппыДоступа.ОбъектДоступа
			ИЛИ Контрагенты.ЭтоГруппа
			ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка))

Меня смущает то, что в типовых используется как-раз "В". Но там такие хитрые запросы, что я не смог их до конца понять.
...
Рейтинг: 0 / 0
12.08.2010, 14:25
    #36788419
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
Как можно объективно сравнить скорости выполнения запросов?
...
Рейтинг: 0 / 0
12.08.2010, 17:03
    #36789083
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
Что всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Кроме того, у тебя связь через Контрагенты.ГруппаДоступа как-то незаметно морфировала в связь по Контрагенты.Ссылка.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
        ПО Контрагенты.ГруппаДоступа = ПраваДоступаПользователей.ОбъектДоступа
		ИЛИ Контрагенты.ЭтоГруппа
		ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
	ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
		И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
		И СоставГруппы.Пользователь = &ТекущийПользователь
...
Рейтинг: 0 / 0
13.08.2010, 00:52
    #36789754
vitkhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
supervkКак можно объективно сравнить скорости выполнения запросов?
Запросы для RLS отлаживаешь в универсальном отчете. Если MS SQL - отлавливаешь запрос из универсального отчета в профайлере, анализируешь план запроса, если что то не так - в QA отлаживаешь запрос, как только получил приемлемый план исполнения, пытаешся написать в 1С запрос который на выходе будет парсирован в такой же оптимальный как и полученный в QA.
QA это для 2000 сервера, для 2005 и выше функционал QA находится в менеджмент студио.

Да и еще учти, что 1С RLS запросы будет добавлять к обычным через инструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ, фактически ВЫБРАТЬ РАЗРЕШЕННЫЕ будет заменно на RLS запрос, поэтому пиши все запросы правильно и проблем будет меньше, вот здесь обсуждалась производительность различных вариантов разименовывания в запросах 1С, почитай будет полезно.
...
Рейтинг: 0 / 0
13.08.2010, 05:18
    #36789807
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
WildSeryКроме того, у тебя связь через Контрагенты.ГруппаДоступа как-то незаметно морфировала в связь по Контрагенты.Ссылка.

Да, спасибо, ошибся.

WildSeryЧто всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
        ПО Контрагенты.ГруппаДоступа = ПраваДоступаПользователей.ОбъектДоступа
		ИЛИ Контрагенты.ЭтоГруппа
		ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
	ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
		И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
		И СоставГруппы.Пользователь = &ТекущийПользователь


Спасибо, выбирается то что надо, но с дублями, как я понял, по количеству вхождений пользователя в группы пользователей. Для РЛС это не критично?
...
Рейтинг: 0 / 0
13.08.2010, 05:20
    #36789808
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
vitkhvЗапросы для RLS отлаживаешь в универсальном отчете. Если MS SQL - отлавливаешь запрос из универсального отчета в профайлере, анализируешь план запроса, если что то не так - в QA отлаживаешь запрос, как только получил приемлемый план исполнения, пытаешся написать в 1С запрос который на выходе будет парсирован в такой же оптимальный как и полученный в QA.
QA это для 2000 сервера, для 2005 и выше функционал QA находится в менеджмент студио.
Да и еще учти, что 1С RLS запросы будет добавлять к обычным через инструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ, фактически ВЫБРАТЬ РАЗРЕШЕННЫЕ будет заменно на RLS запрос, поэтому пиши все запросы правильно и проблем будет меньше, вот здесь обсуждалась производительность различных вариантов разименовывания в запросах 1С, почитай будет полезно.
Спасибо, vitkhv.
...
Рейтинг: 0 / 0
13.08.2010, 05:38
    #36789811
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
WildSeryЧто всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Спасибо, выбирается то что надо, но с дублями, как я понял, по количеству вхождений пользователя в группы пользователей. Для РЛС это не критично?Мой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
...
Рейтинг: 0 / 0
13.08.2010, 10:10
    #36789993
vitkhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
supervkМой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
Может стоит SQL покурить и правильно написать запрос, чтобы дублей не выдавал?
...
Рейтинг: 0 / 0
13.08.2010, 10:13
    #36790004
supervk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
vitkhvsupervkМой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
Может стоит SQL покурить и правильно написать запрос, чтобы дублей не выдавал?Да, конечно. Я просто по результатам отписался.
...
Рейтинг: 0 / 0
13.08.2010, 13:21
    #36790612
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
RLS последний раз смотрел уже давно и мало, проясните - действительно, если шаблон выдаёт дубли, то и в списке будут дубли?
Сейчас самому проверить не на чем.
...
Рейтинг: 0 / 0
13.08.2010, 19:05
    #36791522
vitkhv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация запроса RLS
WildSeryRLS последний раз смотрел уже давно и мало, проясните - действительно, если шаблон выдаёт дубли, то и в списке будут дубли?
Сейчас самому проверить не на чем.

По моему и с дублями все нормально будет, хотя могу и ошибаться.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация запроса RLS / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]