Имя: Пароль:
1C
 
Перенос выполнения запросов на сервер. Плюсы и минусы
0 ИС-2
 
naïve
21.05.15
13:21
1. Медленее 50% (1)
2. хз 50% (1)
3. Быстрее 0% (0)
4. Можно только для запросов с маленьким результатом 0% (0)
Всего мнений: 2

Как повлияет (повышение скорости работы системы) выполнение запросов на сервере.
Т.е в серверном модуле пишем функцию

Функция ВыполнитьЗапрос(ТекстЗапрос,ПараметрыЗапрос,МенеджерВременныхТаблиц = Неопределено) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапрос;
    Для Каждого КлЗн из ПараметрыЗапрос Цикл
        Запрос.УстановитьПараметр(КлЗн.Ключ,КлЗн.Значение);
    КонецЦикла;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    Возврат Запрос.Выполнить();    
КонецФункции

Плюс - меньше нагрузка на терминал, минус - нагрузка на сервер + объем трафика.
1 ДенисЧ
 
21.05.15
13:24
А куда ты решил вернуть РезультатЗапроса? На тонкого клиента?
2 Fuas4
 
21.05.15
13:24
(1) тут не УФ
3 ИС-2
 
naïve
21.05.15
13:34
(1) на толстого
4 ДенисЧ
 
21.05.15
13:46
(3) Тогда зачем? Запрос всё равно выполняется на сервере
5 ИС-2
 
naïve
21.05.15
14:13
(4) не понял - как это на сервере. Будет на сервере лишь если используется директива &НаСервере или код в серверном модуле (как у меня). В остальных случаях все делается на клиенте
6 Mankubus
 
21.05.15
14:28
(5) а к чему запрос обращается на клиенте? все данные же на сервере
7 Redkiy
 
21.05.15
14:35
(0) ТС, ты о чем?
8 ViSo76
 
21.05.15
14:41
Твой код топикастр выдаст ошибку, так как с сервера возвращать объект на клиента нельзя это раз, если бы и можно было то было бы медленнее.

PS: Автор явно путает сервер базы данных и сервер приложения.

Медленее
9 Зеленый пень
 
21.05.15
14:50
(0) Это имеет смысл в одном случае  - когда эта функция находится в привилегированном модуле, чтобы получить данные независимо от RLS.

(8) Результат запроса - прекрасно обменивается между клиентом и сервером.
10 Ненавижу 1С
 
гуру
21.05.15
14:50
запрос в любом случае выполняет СУБД, компонует его (ИТОГИ) сервер приложений, так что ничего не изменится

я сделал только ради привилигированного режима
11 xaozai
 
21.05.15
14:52
(0) Как запрос может выполняться на клиенте? o_0

хз
12 ИС-2
 
naïve
21.05.15
15:12
(8) с чего? Результат запроса не мутабельное значение
(11) во оно как михалыч. Интересно как что выполняется все время на сервере, а что на клиенте.

Например, где делается код (точнее получаются значения реквизитов)
    Для Каждого СтрОснование из Основания.Товары Цикл
        Если СтрОснование.Номенклатура.Услуга Тогда
            Продолжить;
        КонецЕсли;
        
        ТекХарактерГруза = Строка(СтрОснование.Номенклатура.НоменклатурнаяГруппа);
конеццикла

а, то смотрю некоторые переборы работают быстрее запросов...
13 ДенисЧ
 
21.05.15
15:15
(12) А за такой код нужно руки отрывать
14 ИС-2
 
naïve
21.05.15
15:36
(13) с чего? Это часть кода. Запросом работает дольше. Простой перебор отрабатывет достаточно быстро и нет излишнего получения данных. Первые строки отработал и прервать
15 ДенисЧ
 
21.05.15
15:38
(14) ЗАпрос работает дольше только в файловой версии или в кривых руках.
16 ИС-2
 
naïve
21.05.15
15:57
(15) Запрос не предназначен для обработки данных.

Делай я алгоритм запросом, то было бы несколько ВТ с выразить, выбор когда и группировками. Сможет ли SQL нормально оптимизировать такой запрос? Нет. Алгоритм для этого случая подходит лучше
17 DS
 
21.05.15
16:00
(16) Смешно читать. "Алгоритм подходит лучше запроса". А как этот "алгоритм" получает данные? Тем же запросом, загляни в технологический журнал. Вывод: запросы надо уметь писать.
18 Зеленый пень
 
21.05.15
16:03
(12) Код не смертельный для базы, но - не образец.
Был опыт, когда некий документ весил под 100мб каждый, и при обращении через точку умирало всё надолго.
19 Лефмихалыч
 
21.05.15
16:05
(0) глупость от начала и до конца
20 Defender aka LINN
 
21.05.15
16:05
(14) "Запросом работает дольше"
А месье в курсе, что "СтрОснование.Номенклатура.НоменклатурнаяГруппа" = "Выбрать * из Справочник.Номенклатура ГДЕ Ссылка = &Номенклатура"?
21 ДенисЧ
 
21.05.15
16:06
(16) @ Сможет ли SQL нормально оптимизировать такой запрос? Нет@

Если ты не можешь, это не значит, что в МС сидят люди дурней тебя
22 Гёдза
 
21.05.15
16:07
(0) Собственно сервер 1с это делает и так только неявно
23 Бубка Гоп
 
21.05.15
16:09
Подождите, но ведь сегодня только четверг!
24 Defender aka LINN
 
21.05.15
16:09
(16) "Запрос не предназначен для обработки данных" - а ты уже Oracle об этом предупредил? А то неловко будет, парни-то не в курсе.
25 ИС-2
 
naïve
21.05.15
16:10
(20) и запрос в цикл в конце
(24) И кто использует оракл?
26 МаксимМП23
 
21.05.15
16:11
Весна заканчивается, а обострения продолжаются... необходимо сменить препараты.
27 Бубка Гоп
 
21.05.15
16:12
и даже нет варианта КГ/АМ
28 Defender aka LINN
 
21.05.15
16:15
(25) "и запрос в цикл в конце" - переводчик! В зале есть переводчик?!
"И кто использует оракл?" - да ларьки всякие мелкие, шелупонь, одним словом...
29 DS
 
21.05.15
16:18
(28) "и запрос в цикл в конце" - я так думаю, это самокритика (12), где по два запроса в цикле.
30 ssh2006
 
21.05.15
16:19
(0) нет смысла,
только если без проверки прав в привелигированной серверной процедуре/модуле нужно выполнить
31 Defender aka LINN
 
21.05.15
16:20
(29) Второй раз из кэша будет получаться, но и 1 раза более чем достаточно :)
32 Бубка Гоп
 
21.05.15
16:21
(30) а почему просто не заюзать УстановитьПривилегированныйРежим ?
33 DS
 
21.05.15
16:24
(31) Да. И там, и там "номенклатура"...
34 ssh2006
 
21.05.15
16:28
(32) > а почему просто не заюзать УстановитьПривилегированныйРежим ?

Или прив. модуль или УстановитьПривилегированныйРежим в серверной процедуре. Это и имел ввиду.
Программист всегда исправляет последнюю ошибку.