|
v7: Скорость работы запроса в DBF и SQL | ☑ | ||
---|---|---|---|---|
0
НеПалец
31.07.13
✎
16:39
|
Есть крайне простой запрос:
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент; |Группировка ТекущийЭлемент ; |Условие(ТекущийЭлемент.ЭтоГруппа() = 1);"; В DBF скорость работы 2 сек. В SQL 80!!!! сек. Все локально на сервере. Сервер на win 2008, SQL 2008. Как можно ускорить выполнение запроса в SQL? Спасибо. |
|||
1
НеПалец
31.07.13
✎
16:40
|
Ой. Должно быть в 1С7.7.
Извините. |
|||
2
Denyk
31.07.13
✎
16:40
|
Прямые запросы - будет скорость как в DBF
|
|||
3
НеПалец
31.07.13
✎
16:42
|
(2)
Согласен. Это очевидно. Но подобная разница во времени наводит на мысль на неправильную настройку SQL. Можно ли обойтись без прямого запроса? |
|||
4
Ёпрст
31.07.13
✎
16:50
|
(0)
запрос в данном случае, выбирает ТОЛЬКО элементы, писать бред на ЭтоГруппа - идиотизм. Условия через точку в sql варианте превращаются.. в просто п..ц - отсюда все тормоза. |
|||
5
Ёпрст
31.07.13
✎
16:50
|
ускорение, элементарно:
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент; |Группировка ТекущийЭлемент ; //|Условие(ТекущийЭлемент.ЭтоГруппа() = 1); |"; |
|||
6
НеПалец
31.07.13
✎
16:58
|
(5)
Однозначно, это так. Однако условие : Пока ЗапросГруппы.Группировка("ТекущийЭлемент") = 1 Цикл Если ЗапросГруппы.ТекущийЭлемент.ЭтоГруппа() = 1 Тогда КонецЕсли; КонеЦЦикла; Сводит весь выигрыш по времени к "0". |
|||
7
Ёпрст
31.07.13
✎
17:00
|
(6) группы запрос потом добавляет
проверять на ЭтоГруппа в тексте запроса не имеет смысла - там их просто нет. |
|||
8
ДенисЧ
31.07.13
✎
17:00
|
Поставь Группировка ТекущийЭлемент Без Групп;
и проверку убери к такой-то |
|||
9
Ёпрст
31.07.13
✎
17:01
|
надо скорости - так:
select id as [Номенклатура $Справочник.Номенклатура], isfolder as ЭтоГруппа from $Справочник.Номенклатура (nolock) |
|||
10
НеПалец
31.07.13
✎
17:06
|
(9)
Это 1С++? |
|||
11
Ёпрст
31.07.13
✎
17:17
|
да, можешь и через ado написать, если брезгуешь, но только там типизации нема - придётся рученьками .. усё делать потом
|
|||
12
vcv
31.07.13
✎
21:32
|
А если так:
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Родитель = Справочник.Номенклатура.Родитель; |Группировка Родитель;" Сам проверить сейчас не могу, инет в деревне совсем дохлый. |
|||
13
ЧеловекДуши
01.08.13
✎
06:34
|
(0) 80 сек в SQL, просто у вас руки не из того места, для SQL запросов.
Оптимизируй :) |
|||
14
ЧеловекДуши
01.08.13
✎
06:35
|
+ А где собственно запрос на SQL? :)
|
|||
15
КонецЦикла
01.08.13
✎
07:36
|
(3) Условие на группу?
Интересно, а что если попробовать Запрос.ВключитьSQL(0); |
|||
16
Ёпрст
01.08.13
✎
09:00
|
(12) так в выборке не будут "пустые" группы, те, в которых элементов нема.
|
|||
17
arsik
гуру
01.08.13
✎
09:20
|
(6) Тебе не так надо
Возможно так будет быстрее Пока ЗапросГруппы.Группировка("ТекущийЭлемент") = 1 Цикл Если ЗапросГруппы.ЭтоГруппа("ТекущийЭлемент") = 1 Тогда КонецЕсли; КонеЦЦикла; |
|||
18
varelchik
01.08.13
✎
09:56
|
Запрос.ВключитьSQL(0) это бред.
select s.id [Родитель $Спр.Номенклатура] from $Справочник.Номенклатура s (nolock) where s.isfolder=1 |
|||
19
ЧеловекДуши
01.08.13
✎
14:14
|
(15) Не поможет :)
|
|||
20
ЧеловекДуши
01.08.13
✎
14:15
|
(18) Автор считает, что если куплен SQL, то он сам должен работать быстро :)
"Негоже боярину до SQL склоняться" :) |
|||
21
Chai Nic
01.08.13
✎
14:27
|
Стандартные запросы работают так, что уж лучше бы они не работали вообще никак. Особенно с sql-сервером. Когда ВСЯ первичная выборка с сервера перекачивается в каталог временных файлов в виде dbf, а все отборы накладываются уже на эту выборку.
|
|||
22
varelchik
01.08.13
✎
17:28
|
(21) 100.
а вот 1С++ получает только результат, да и то в память а не временные файлы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |