|
Производительность запросов. | ☑ | ||
---|---|---|---|---|
0
Novus_Dess
05.05.15
✎
14:27
|
Вопрос на засыпку. Какой из запросов выполнится быстрее при наличии 1000 документов между датой1 и датой2.
СписокДоков состоит зи 1000 документов и это единственные документы между датой1 и датой2. Выбрать * из Регистр где Регистр.Регистратор в (&СписокДоков) Выбрать * из регистр где Регистр.Период между &Дата1 и &Дата2 Пошел запускать на базе замер производительности, а пока может кто ответит :) |
|||
1
SeraFim
05.05.15
✎
14:29
|
Думаю, что второй =)
|
|||
2
МаксимМП23
05.05.15
✎
14:31
|
Тоже склоняюсь ко второму. Ибо первая конструкция на уровне СУБД будет выглядеть интересно.
|
|||
3
qeos
05.05.15
✎
14:34
|
все завизит от архитектуры, в большинстве случаев будет второй быстрее..
|
|||
4
dk
05.05.15
✎
14:36
|
чо тут думать
1000 сравнений 2-х дат и 1000 поисков 1 из 1000 |
|||
5
hhhh
05.05.15
✎
14:39
|
(4) всё-таки не поиски там, а прямое обращение по ссылкам.
|
|||
6
Necessitudo
05.05.15
✎
14:40
|
А виртуальной таблицы у регистра нету?
|
|||
7
MadHead
05.05.15
✎
14:41
|
(5) а "прямое обращение по ссылка" это что такое? Не поиск ли по инддексированному полю гуид?
|
|||
8
Ёпрст
05.05.15
✎
14:44
|
(0) первый
|
|||
9
hhhh
05.05.15
✎
14:52
|
(7) но это быстрее, чем сравнение с двумя датами.
|
|||
10
AlexTim03
05.05.15
✎
14:53
|
Посмотри 2 плана запросов, узнаешь ответ
|
|||
11
AlexTim03
05.05.15
✎
14:53
|
И нам расскажи
|
|||
12
Fragster
гуру
05.05.15
✎
14:54
|
по периоду кластерный индекс. при запросе по датам будет использваотсья всегда.
по ссылкам - некластерный. В зависимости от количества данных - либо будет использоваться кластерный, либо по ссылке. В любом случае это будет медленнее |
|||
13
leonidkorolev
05.05.15
✎
14:55
|
В первом запросе план получается на много сложнее и медленнее. Поиск по некластреризованному индексу типов документов и затем вложенный цикл со списком документов
Вот втором случае очень компактный план и поиск по кластерному индексу. Второй быстрее не порядок. |
|||
14
SUA
05.05.15
✎
14:57
|
2й поидее быстрее
потому что условие проще и оба поля индексированы одинаковые они в случае когда Регистр.Дата В(&СписокДат) это не считая составных типов что уже заметили |
|||
15
Bober
05.05.15
✎
14:57
|
(0)
I. если в параметре &СписокДоков будет только один тип документов, то будет работать быстро, если там несколько типов документов, то нужно разбивать это запрос несколько, например: ВЫБРАТЬ * ИЗ Регистр где Регистратор в (&СписокДоковТип1) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ * ИЗ Регистр где Регистратор в (&СписокДоковТип2) II если там более 1к документов, то лучше это через временную таблицу реализовать, 1с не рекомендует передавать в параметрах большие объемы значений. III Так, что если 1к документов укладываются в отбор через период, то лучше использовать его (при условии что это частый запрос к базе, а не какае-то разовая акция). |
|||
16
Fragster
гуру
05.05.15
✎
14:58
|
(15) куита
|
|||
17
Novus_Dess
05.05.15
✎
15:00
|
По результатам 5 замеров. примерно одинаково
https://yadi.sk/i/U2qkA-WSgSCoM |
|||
18
Novus_Dess
05.05.15
✎
15:00
|
База файловая.
|
|||
19
Bober
05.05.15
✎
15:01
|
(16) кому как.
|
|||
20
Fragster
гуру
05.05.15
✎
15:01
|
(17) эээ. более, чем в полтора раза - это одинаково?
|
|||
21
Fragster
гуру
05.05.15
✎
15:01
|
ну и да - измерять на одном выполнении запроса - несколько странно
|
|||
22
Novus_Dess
05.05.15
✎
15:03
|
одинаково - всмысле примерно одинаковые результаты всех 5 замеров.
|
|||
23
Novus_Dess
05.05.15
✎
15:03
|
да, в полтора раза медленнее работает запрос с регистратором
|
|||
24
leonidkorolev
05.05.15
✎
15:04
|
(17) Заголовок порадовал
(22) А какой вариант быстрее получился? |
|||
25
leonidkorolev
05.05.15
✎
15:04
|
(23) ок, понял
|
|||
26
Bober
05.05.15
✎
15:06
|
(20) ну а где ты прочитал про одинаково?
|
|||
27
kosts
05.05.15
✎
15:11
|
Замер не корректный. Может после первого запроса данные в памяти и второй запрос из-за этого быстрее работает.
|
|||
28
Novus_Dess
05.05.15
✎
15:13
|
(27) Ваше предложение? Две отдельных обработки?
|
|||
29
kortun
05.05.15
✎
15:14
|
ага, а давайте теперь еще к куску кода добавим сравнение на проведенность, сравнение на контрагента и вид операции
добавим еще условие по складу и вот тут то уже сравнение со списком документов быстрее будет отрабатывать |
|||
30
Novus_Dess
05.05.15
✎
15:15
|
(29) Это запрос при обмене. Выгрузка зарегистрированных изменений. дополнительные условия не нужны.
|
|||
31
kortun
05.05.15
✎
15:16
|
(30) ну это пока, потом захотят по организациям делить
|
|||
32
rphosts
05.05.15
✎
15:17
|
(0) второй без вариантов
|
|||
33
dk
05.05.15
✎
15:20
|
(29) а если на "боевых данных" где миллионы документов?
|
|||
34
Fragster
гуру
05.05.15
✎
15:21
|
(26) не заглядывая в картинку (17) как еще воспринимать "По результатам 5 замеров. примерно одинаково"
|
|||
35
Novus_Dess
05.05.15
✎
15:32
|
(33) экспериментируйте :)
&НаСервере Процедура ЗамерНаСервере() НачалоПериода = Дата(2014,1,1,0,0,0); КонецПериода = Дата(2014,12,31,0,0,0); Запрос = Новый Запрос("ВЫБРАТЬ | ВзаиморасчетыССотрудниками.Регистратор |ИЗ | РегистрНакопления.ВзаиморасчетыССотрудниками КАК ВзаиморасчетыССотрудниками |ГДЕ | ВзаиморасчетыССотрудниками.Период МЕЖДУ &НачалоПериода И &КонецПериода"); Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода); Запрос.УстановитьПараметр("КонецПериода",КонецПериода); Регистраторы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Регистратор"); ЗапросПоРегистратору = Новый Запрос("ВЫБРАТЬ | ВзаиморасчетыССотрудниками.Период, | ВзаиморасчетыССотрудниками.Регистратор, | ВзаиморасчетыССотрудниками.НомерСтроки, | ВзаиморасчетыССотрудниками.Активность, | ВзаиморасчетыССотрудниками.ВидДвижения, | ВзаиморасчетыССотрудниками.Организация, | ВзаиморасчетыССотрудниками.ФизическоеЛицо, | ВзаиморасчетыССотрудниками.СтатьяФинансирования, | ВзаиморасчетыССотрудниками.СтатьяРасходов, | ВзаиморасчетыССотрудниками.Сотрудник, | ВзаиморасчетыССотрудниками.Подразделение, | ВзаиморасчетыССотрудниками.СуммаВзаиморасчетов, | ВзаиморасчетыССотрудниками.ВидВзаиморасчетов, | ВзаиморасчетыССотрудниками.ГруппаНачисленияУдержанияВыплаты |ИЗ | РегистрНакопления.ВзаиморасчетыССотрудниками КАК ВзаиморасчетыССотрудниками |ГДЕ | ВзаиморасчетыССотрудниками.Регистратор В(&Регистратор)") ; ЗапросПоРегистратору.УстановитьПараметр("Регистратор",Регистраторы); ЗапросПоДатам = Новый Запрос( "ВЫБРАТЬ | ВзаиморасчетыССотрудниками.Период, | ВзаиморасчетыССотрудниками.Регистратор, | ВзаиморасчетыССотрудниками.НомерСтроки, | ВзаиморасчетыССотрудниками.Активность, | ВзаиморасчетыССотрудниками.ВидДвижения, | ВзаиморасчетыССотрудниками.Организация, | ВзаиморасчетыССотрудниками.ФизическоеЛицо, | ВзаиморасчетыССотрудниками.СтатьяФинансирования, | ВзаиморасчетыССотрудниками.СтатьяРасходов, | ВзаиморасчетыССотрудниками.Сотрудник, | ВзаиморасчетыССотрудниками.Подразделение, | ВзаиморасчетыССотрудниками.СуммаВзаиморасчетов, | ВзаиморасчетыССотрудниками.ВидВзаиморасчетов, | ВзаиморасчетыССотрудниками.ГруппаНачисленияУдержанияВыплаты |ИЗ | РегистрНакопления.ВзаиморасчетыССотрудниками КАК ВзаиморасчетыССотрудниками |ГДЕ | ВзаиморасчетыССотрудниками.Период МЕЖДУ &НачалоПериода И &КонецПериода") ; ЗапросПоДатам.УстановитьПараметр("НачалоПериода",НачалоПериода); ЗапросПоДатам.УстановитьПараметр("КонецПериода",КонецПериода); РезультатЗапросаПорегистратору = ЗапросПоРегистратору.Выполнить(); РезультатЗапросаПоДатам = ЗапросПоДатам.Выполнить(); КонецПроцедуры &НаКлиенте Процедура Замер(Команда) ЗамерНаСервере(); КонецПроцедуры |
|||
36
hhhh
05.05.15
✎
16:13
|
(0) а это что?
Запрос = Новый Запрос("ВЫБРАТЬ | ВзаиморасчетыССотрудниками.Регистратор |ИЗ | РегистрНакопления.ВзаиморасчетыССотрудниками КАК ВзаиморасчетыССотрудниками |ГДЕ | ВзаиморасчетыССотрудниками.Период МЕЖДУ &НачалоПериода И &КонецПериода"); Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода); Запрос.УстановитьПараметр("КонецПериода",КонецПериода); Регистраторы = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Регистратор"); второй запрос тоже. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |