Имя: Пароль:
1C
 
v8: Почему запрос лучше выборки из языка?
0 budanila
 
27.01.10
14:39
помню когда начинал изучать 1с8 читал что запрос предпочтительней простых выборок. типо запрос сразу в оперативку загружаецо а выборка по 5 записей.. ну и прочие сравнения выборки и запроса. Напомните пожалуйста, у кого с памятью лучше.... энто где найти мну))))
1 budanila
 
27.01.10
15:15
опаньки)))
2 ДенисЧ
 
27.01.10
15:19
3 Ненавижу 1С
 
гуру
27.01.10
15:30
На собеседование ходил?
4 Hazer79
 
27.01.10
15:30
(0) Насколько я помню, как на курсах объясняли, выборка из языка всё равно транслируется в запрос...
Вроде так.
5 Mitriy
 
27.01.10
15:34
(0) выборкой данных ты вытаскиваешь все поля, а выборкой из результата запроса ты можешь вытащить только то, что тебе точно нужно...
6 Shurjk
 
27.01.10
15:39
И началось, еще версии есть.
(0) На самом деле не всегда предпочтительней, все зависит от контекста использования.
7 Ненавижу 1С
 
гуру
27.01.10
15:41
(6) давай примеры контекстов
8 Mitriy
 
27.01.10
15:42
(6) ты что-то можешь добавить к (5)?
9 ERWINS
 
27.01.10
15:42
предпочтительней из языка если ты выбираешь не больше 3 записей
или выбираешь почти одно и тоже
проверено на 8.1

если же выбираешь 50 то запрос и проще и быстрее
10 ERWINS
 
27.01.10
15:43
например выбрать одну запись из регистра сведений
11 H A D G E H O G s
 
27.01.10
15:45
Так.
Всем запомнить.
Запросы - как максимум лучше, как минимум - также, что и выборка.

Баянище.
12 Shurjk
 
27.01.10
15:48
(7) Ответы в (0) есть, там же написано что выборка которая получается запросом выбирается 1 раз, а просто выборка является динамической, т.е. в случае если вы выбираете значения которые могут измениться с момента выборки предпочтительней использовать простую выборку. Опять же как верно подмечено она и памяти меньше расходует, но выборка запросом работает быстрее.
13 ERWINS
 
27.01.10
15:51
(12) я проводил тест выборка с запросом работала на порядок медленее в 10 раз

на 8.1
14 Dirk Diggler
 
27.01.10
15:51
(11) как составить запрос чтоб работал так же быстро как выборка для 1 элемента?
15 Aprobator
 
27.01.10
15:54
(14) гы:

ТекстЗапроса = "
|ВЫБРАТЬ
|   &ТвойЭлемент";
16 ERWINS
 
27.01.10
15:56
задача была такой

есть регистр сведений из сотен миллионов позиций

почти случайно из него выбираются по ключу значения каждую секунду или около того
очень часто выбираются одни и те же данные (но не всегда)

Запрос повалил систему (не успевала выдавать данные) даже при одном пользователе
выбор из регстра нормально похал для 10ти
17 Ненавижу 1С
 
гуру
27.01.10
15:58
(16) интересно почему?
18 H A D G E H O G s
 
27.01.10
15:58
(14) Выбрать Первые 1
19 H A D G E H O G s
 
27.01.10
16:02
(16) Кот в студию!
20 DUDE
 
27.01.10
16:03
В ЕСИС(в разделе ИТС метод. рекоменд. по конф-ю) написано, что выборка порциями по 25 объектов делается. Так что она более щадяща к объему требуемой ОЗУ, но и медленней. Ну это уточнение к (0). Тебе дорога на ИТС, товарищ :)
21 H A D G E H O G s
 
27.01.10
16:05
(20) Без базара - сделаем запрос порциями по 25 записей и только с НУЖНЫМИ полями. Он будет ЕЩЕ более щадящим к памяти и к SQL серверу.
22 budanila
 
27.01.10
16:05
(3) на собеседование не ходил))) просто личный интерес)
А кто так извращаецо что имена мистовчан по вертикали отображаются а не по горизонтали?
Я знаю что запрос быстрей намного и во многих случаях предпочтительней... но описать все причины этого не могу))) короче как собака - хвастом виляю....
23 Megas
 
27.01.10
16:08
(16) Для чего ? просто оч интересно ...
24 ERWINS
 
27.01.10
16:11
(23) данные передавались на принтер
25 DUDE
 
27.01.10
16:14
(20) Да я не спорю. :) Просто уточнил, коль как раз сегодня на глаза цифра попалась :)
26 acsent
 
27.01.10
16:26
(21) По простому не сделаешь.
Выборка уместна если например нужно обработать все документы
27 ERWINS
 
27.01.10
16:31
данные выбранные из запрса не кешируются...

а результат выбора из регистра кешируется
28 H A D G E H O G s
 
27.01.10
16:39
(27) Индексированная ТЗ спасет отца русской демократии.
P.S.
Читать литературу о времени жизни такого кэша и его очистке при заполнении.
(26) Если только перезаписать, тоесть везде, где надо ПолучитьОбъект(). И всё.
29 ERWINS
 
27.01.10
16:40
(28) тз на 100 000 000 позиций?
30 H A D G E H O G s
 
27.01.10
16:46
(29) Ну да.
P.S. Можно добавить ДатаВремя и чистить периодически "давно не тронутые".

Ты код Выборки/Запроса покажи.
31 H A D G E H O G s
 
27.01.10
16:47
(29) Я сомневаюсь, что ТЗ у тебя полностью заполниться хоть когда-то.
32 MRAK
 
27.01.10
16:48
На файловой базе объект Запрос создается ГОРАЗДО медленнее, чем выборка. Тестировал давно, еще на 8.0. Сейчас наврядли что поменялось.
33 ERWINS
 
27.01.10
16:55
регистр сведений


код(40 символов) значение(40 символов)
в день разных где то 100 000

нафиг геморой с собственным кешированием?
34 H A D G E H O G s
 
27.01.10
16:57
(33) 1С:Предприятие 8.1 (8.1.14.72)/ "Управление торговлей", редакция 10.3 (10.3.3.3)
ЗАПРОС
Выборка=Запрос.Выполнить().Выбрать();        1    0,000655    90,74
Запрос=Новый Запрос;                        1    0,000037    5,13
Запрос.Текст=                                1    0,000014    1,90
Выборка.Следующий();                        1    0,000006    0,89
Наим=Выборка.Наименование;               1    0,000006    0,86
КонецПроцедуры                                1    0,000002    0,24

ВЫБОРКА
Выборка.Следующий();                        1    0,025279    94,37
Выборка=Справочники.Номенклатура.Выбрать();  1    0,001494    5,58
Наим=Выборка.Наименование;               1    0,000010    0,04
КонецПроцедуры                                1    0,000002    0,01
35 H A D G E H O G s
 
27.01.10
17:06
Миль пардон.
Был необъективен. - база была с 2 элементами номенклатуры, тестовая.

Вот
1С: Управление производственным предприятием+Ликероводочный и винный завод, редакция 1.2 (1.2.7.2.103), файловая, размер справочника 26 498 эл.

ЗАПРОС
Выборка=Запрос.Выполнить().Выбрать();           1    0,017219    99,58
Запрос=Новый Запрос;                            1            0,000039    0,23
Запрос.Текст=                                    1            0,000015    0,08
Наим=Выборка.Наименование;                    1    0,000007    0,04
Выборка.Следующий();                          1    0,000007    0,04
КонецПроцедуры                                     1    0,000003    0,01

ВЫБОРКА
Выборка.Следующий();                             1    0,350581    94,97
Выборка=Справочники.Номенклатура.Выбрать();    1    0,018561    5,03
Наим=Выборка.Наименование;                     1    0,000012    
КонецПроцедуры                                     1    0,000002
36 H A D G E H O G s
 
27.01.10
17:08
(33) <<Код 40 символов>>

Фигасебе..

А типа хэша прикрутить - никак?
37 H A D G E H O G s
 
27.01.10
17:13
(36) Хотя нет, я муть порю. Хэши дают коллизии.
38 MRAK
 
27.01.10
17:20
(35)
УТ 10.2, платформа 8.1.13.37

   Форма.Форма    8    Запрос = Новый Запрос;    1    0,000037    0,01
   Форма.Форма    9    Запрос.Текст = "ВЫБРАТЬ    1    0,000016    
   Форма.Форма    14    Выборка = Запрос.Выполнить().Выбрать();    1    0,492219    96,91
   Форма.Форма    15    Пока Выборка.Следующий() Цикл    1    0,000009        Форма.Форма    16    Сообщить(Выборка.Ссылка);    1    0,015626    3,08



   Форма.Форма    23    Выборка = Справочники.Номенклатура.Выбрать();    1    0,000973    0,59
   Форма.Форма    24    Пока Выборка.Следующий() Цикл    1    0,151836    92,82
   Форма.Форма    25    Сообщить(Выборка.Ссылка);    1    0,010769    6,58
39 MRAK
 
27.01.10
17:21
(38) + текст запроса:

   Запрос.Текст = "ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура";
40 H A D G E H O G s
 
27.01.10
17:27
(39) Размер справочника?
41 fisher
 
27.01.10
17:27
Выборка вычитывает данные на клиента порциями, по мере её обхода.
Поэтому в толстой книге её рекомендуется использовать вместо запроса при обработке очень больших объемов данных (которые систему в состоянии конкретно пригрузить).
А так смысла никакого нет для справочников и документов выборки использовать.
42 H A D G E H O G s
 
27.01.10
17:31
(41) <<при обработке очень больших объемов данных>>
я рекомендую использовать Запрос (Выбрать Первые X) в цикле.
43 fisher
 
27.01.10
17:34
(42) В смысле, эмулировать вычитку порциями? Не вижу смысла. Да, будешь выбирать только нужные поля. Но больше накладных расходов системы на вызов запросов из языка. Даже если и будет выигрыш по скорости, то не думаю что большой. В этой ситуации лично я сделаю выбор в пользу выборки. Просто потому, что так код наглядней и проще.
44 H A D G E H O G s
 
27.01.10
17:37
(43) <<Но больше накладных расходов системы на вызов запросов из языка>>
45 H A D G E H O G s
 
27.01.10
17:37
(44) +
Сфига ли?
46 H A D G E H O G s
 
27.01.10
17:37
Особенно если выполнять на Сервере
47 Жан Пердежон
 
27.01.10
17:43
запрос только нужные поля тягает, а выборка - все
48 fisher
 
27.01.10
17:43
(45)
"Я так думаю" (с)
Тестировать лень.
(46) Выборку тоже на сервере можно обрабатывать :)
49 Nurik87
 
27.01.10
17:46
(47)Запрос ведь получает ссылки или нет?
50 MRAK
 
27.01.10
17:48
(40) 16 352
51 fisher
 
27.01.10
17:48
Ну вот чуйка у меня, что нет особого смысла в собственной порционной вычитке в тех случаях, когда выборкой можно обойтись. Только морока.
Не, можно канешна запихать в объект стотыщ реквизитов и еще фильмов ему в хранилища значений засандалить. Тогда однозначно запрос рулить будет :)
52 Дикообразко
 
27.01.10
17:52
(48) фигню написал ... для сервера что выборка, что запрос... один фиг запросом станет
53 rsv
 
27.01.10
17:52
(0) "Почему запрос лучше выборки из языка"

Что лучше - один select или 1000 селектов ??
54 MRAK
 
27.01.10
17:56
(49) смотря, как ты его напишешь. на скуле не могу сейчас протестировать, но в файле запрос чаще работает медленнее, чем выборка.

(47) см (39).если я добавлю еще Код и Наименование в Запрос, то он еще процентов на 40% тормознее исполняется.
55 MRAK
 
27.01.10
17:57
(53) H A D G E H O G s в (42) как раз предлагает запрос в цикле.
56 MRAK
 
27.01.10
17:58
(54) + хотя мне все-равно запрос больше нравиться. Выборками практически не пользуюсь.
57 Жан Пердежон
 
27.01.10
18:04
(54) на файловой базе?
58 H A D G E H O G s
 
27.01.10
18:05
(51) <<и еще фильмов ему в хранилища значений засандалить>>

Не взлетит.
Данные из хранилища не читаются до метода Получить()
59 H A D G E H O G s
 
27.01.10
18:09
(50) Тогда полный код для теста ВЫБОРКИ приведи.
А то меня смущает строка
<< Форма.Форма    24    Пока Выборка.Следующий() Цикл    1    0,151836    92,82
>>

А конкретно цифра
1
60 fisher
 
27.01.10
18:13
(58) Хм? Сам не пробовал. Но в толстой книжке написано что читаются. Поэтому настоятельно рекомендуется выносить их в регистр сведений.
61 Bober
 
27.01.10
18:38
(61) можешь проверить, создать ТЧ с реквизитом хранилище и положи туда 500 строк по 1мб. и посмотри с какой скоростью будет получиться объект.
62 Bober
 
27.01.10
18:41
(38) (39)  в данных примерах нет отличий.
А вот если потребуются условия сложнеее "равно" и "и", то выборка уже проигрывает полностью.
63 Bober
 
27.01.10
18:45
(41) это справедливо к любой выборке, СправочникВыборка или ВыборкаИзРезультатаЗапроса.
64 Defender aka LINN
 
27.01.10
19:08
(63) Наглая и бессовестная ложь
65 Bober
 
27.01.10
20:01
(64) Другова и не ожидал -)
66 MRAK
 
27.01.10
20:35
(59) не понял причем тут "1"...

вот тебе полный код обработки:


Процедура ЗапросНажатие(Элемент)
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура";
   Выборка = Запрос.Выполнить().Выбрать();
   Сообщить(Выборка.Количество());
   Пока Выборка.Следующий() Цикл
       Сообщить(Выборка.Ссылка);
       Прервать;
   КонецЦикла;
КонецПроцедуры

Процедура ВыборкаНажатие(Элемент)
   Выборка = Справочники.Номенклатура.Выбрать();
   Пока Выборка.Следующий() Цикл
       Сообщить(Выборка.Ссылка);
       Прервать;
   КонецЦикла;
КонецПроцедуры
67 MRAK
 
27.01.10
20:36
(62) блин, не читатель чтоль?

никто и не отрицает, что Выборка лажа и неологизм
68 MRAK
 
27.01.10
20:38
пилят, отправилось... не то хотел написать....

короче, хрень выборка, когда какие-то условие, сложней валенка...
69 Bober
 
27.01.10
21:34
(68) угу
70 H A D G E H O G s
 
28.01.10
09:04
(66) Плохо, очень плохо.
71 H A D G E H O G s
 
28.01.10
09:07
(66) Тест - не показателен.
72 H A D G E H O G s
 
28.01.10
09:09
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура";

Вот так надо.

Либо без
"Прервать;"

Ишь, хитрые какие !
73 Mitriy
 
28.01.10
09:22
а кто вообще первый сказал, что Выборка из результата запроса считывает сразу все данные?
74 MRAK
 
28.01.10
12:55
(72) согласен, протупил этот момент....
75 Живой Ископаемый
 
28.01.10
13:25
думаю - не переименуй я ветку, не собрала бы она столько реплик... :)