|
v7: Виснет прямой запрос на "топорах". ИЧСХ, не всегда... | ☑ | ||
---|---|---|---|---|
0
Перелетный косяк
08.02.12
✎
17:07
|
Сабж.
Чаще в монополе (50/50), реже в разделенном. Не могу понять из-за чего. Самописка на топорах, Оперучет. 7.7.027, 1cpp.dll-3.2.2.0, 1sqlite.dll- 1.0.2.4 ВремКонтр = СоздатьОбъект("Справочник.Контрагенты"); ВремКонтр.НайтиПоКоду("О0001011"); Сфера = ВремКонтр.ТекущийЭлемент(); Если глПроверкаДаты(ВыбКонПериода,ВыбКонПериода)=0 Тогда Возврат; КонецЕсли; Попытка база = СоздатьОбъект("SQLiteBase"); Исключение ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); база = СоздатьОбъект("SQLiteBase"); КонецПопытки; Состояние("Формируем запрос по приходу товара от ""Сфера""..."); ВремяНачала = _GetPerformanceCounter(); база.Открыть(":memory:"); запрос = база.НовыйЗапрос(); запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF"); ****************************************************************************** //запросом получим список товаров Cферы ****************************************************************************** Текст = "select |РегОстатки.Товар [Товар :Справочник.Номенклатура], |РегОстатки.Клиент [Покупатель :Справочник.Контрагенты] |from [Регистр.ТовОстатки] as РегОстатки |where date BETWEEN :Дата1 And :Дата2"; Текст = Текст + " and РегОстатки.Клиент = :ВыбКлиент"; Текст = Текст + " group by РегОстатки.Товар"; Запрос.Подставлять("ВыбКлиент", Сфера); Запрос.Подставлять("Дата1",ВыбНачПериода); Запрос.Подставлять("Дата2",ВыбКонПериода); ВремяКонца = _GetPerformanceCounter(); //Сообщить("Время выполнения запроса: " + ((ВремяКонца - ВремяНачала)) + " мил.сек." ); //запрос.Отладка(); тз=запрос.ВыполнитьЗапрос(текст); //ТЗ.ВЫбратьСтроку(); СписокНоменклатуры = СоздатьОбъект("СписокЗначений"); ТЗ.Выгрузить(СписокНоменклатуры,,,"Товар"); Сообщить("Закуп от " + Сфера + " в течении этого года ведется по " + СписокНоменклатуры.РазмерСписка() + " позициям"); база.Закрыть(); |
|||
1
orefkov
08.02.12
✎
17:10
|
Обновить на 1.0.2.6
ТиИ Покурить план запроса... |
|||
2
Попытка1С
08.02.12
✎
17:12
|
СписокНоменклатуры.РазмерСписка() - тут скока?
|
|||
3
orefkov
08.02.12
✎
17:13
|
И это, понятно, что sqlite крайне снисходительно относится к синтаксису, но злоупотреблять этим не надо.
Поля Товар, Покупатель, а групбай только по Товар. |
|||
4
Перелетный косяк
08.02.12
✎
17:13
|
(1) Спасибо, Александр.
ТиИ не помогает, да и база под 6 гб, погибну ждать. А по последнему пункту можно пнуть конкретней? |
|||
5
Ёпрст
08.02.12
✎
17:14
|
и это, мот disinict будет быстрее чем group by в данном случае..
|
|||
6
orefkov
08.02.12
✎
17:14
|
И эта, убрать поле Покупатель из запроса, и получать сразу в СЗ.
СписокНоменклатуры = СоздатьОбъект("СписокЗначений"); запрос.ВыполнитьЗапрос(текст, СписокНоменклатуры); |
|||
7
Ёпрст
08.02.12
✎
17:14
|
(4) выкини из селекта вот это, для начала
: |РегОстатки.Клиент [Покупатель :Справочник.Контрагенты] |
|||
8
Перелетный косяк
08.02.12
✎
17:16
|
Вопрос закрыт.
(3) спасло отца рос. демократии Александру низкий поклон и +100500 в карму |
|||
9
Ёпрст
08.02.12
✎
17:16
|
ну и для ускорения, можешь отбор движений воткнуть у измерения
|
|||
10
orefkov
08.02.12
✎
17:16
|
+(5) и (6)
И тогда да, group by выродиться в distinct (4) Для начала включить отладку, потом прогнать запрос в консоли с флагом "Показать план". Ну, или что то же самое, добавить в начало запроса explain query plan |
|||
11
orefkov
08.02.12
✎
17:19
|
Причем тут только топоры, так и не понял...
|
|||
12
Перелетный косяк
08.02.12
✎
17:19
|
Спасибо товарищи гуру
|
|||
13
orefkov
08.02.12
✎
17:22
|
А, понял.
На некоторых диалектах клюшки топорами называют... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |