Имя: Пароль:
1C
1С v8
Разная скорость выполнения запроса
0 Rpik
 
02.03.23
20:23
Подскажите в чем может быть огромная разница в выполнении двух запросов. Отличаются они только отбором. В первом Запросе отбор идет по "Партнер", а во втором по "Грузополучатель".
Первый запрос выполняется за 0,022 секунды, а второй за 3,425 секунды!!!!
-------------1-------------
ВЫБРАТЬ
    ЗаказКлиента.Ссылка КАК Ссылка,
    ЗаказКлиента.СуммаДокумента КАК СуммаДокумента,
    ЗаказКлиента.Склад КАК Склад,
    ЗаказКлиента.ДатаОтгрузки КАК ДатаОтгрузки
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
    ЗаказКлиента.ДатаОтгрузки >= ДАТАВРЕМЯ(2023, 1, 1)
    И ЗаказКлиента.ДатаОтгрузки <= ДАТАВРЕМЯ(2023, 12, 31)
    И ЗаказКлиента.Партнер = &Партнер
    И ЗаказКлиента.Проведен = ИСТИНА
--------------2------------------
ВЫБРАТЬ
    ЗаказКлиента.Ссылка КАК Ссылка,
    ЗаказКлиента.СуммаДокумента КАК СуммаДокумента,
    ЗаказКлиента.Склад КАК Склад,
    ЗаказКлиента.ДатаОтгрузки КАК ДатаОтгрузки
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ГДЕ
    ЗаказКлиента.ДатаОтгрузки >= ДАТАВРЕМЯ(2023, 1, 1)
    И ЗаказКлиента.ДатаОтгрузки <= ДАТАВРЕМЯ(2023, 12, 31)
    И ЗаказКлиента.Грузополучатель = &Грузоплучатель
    И ЗаказКлиента.Проведен = ИСТИНА
1 Мультук
 
гуру
02.03.23
21:56
(0)

1) Сколько раз выполнялись запросы ? Это среднее время ?
2) Сколько записей возвращают запросы? Если первый 10 и второй 10 000, то ...
3) Можно не полениться и включить в консоле запросов "Показывать план".
4) Можно глянуть, а вдруг "кто-то" создал по "Партнер" индекс
2 Garykom
 
гуру
02.03.23
22:02
(0) Все просто
1-й запрос выполняется очень часто, СУБД уже оптимизировалась под него, по сути из кэша
2-й очень редко
3 Garykom
 
гуру
02.03.23
22:03
(2)+ это если исключен п.4 из (1)
4 Garykom
 
гуру
02.03.23
22:03
Ну или тупо поле Грузополучатель у почти всех клиентов NULL ))
5 Garykom
 
гуру
02.03.23
22:04
(4) *у почти всех ЗаказКлиента
6 rudnitskij
 
02.03.23
22:17
(4) или составного типа
7 Garykom
 
гуру
02.03.23
22:21
(6) вариант
8 Ivan_495
 
02.03.23
22:25
а без этих отборов запрос за сколько проходит?
9 Жан Пердежон
 
03.03.23
00:29
(0) план запроса посмотри;
Это УТ/ERP? По партнеру нет индекса разе?
10 Rpik
 
03.03.23
08:15
(1) 1) Сколько раз выполнялись запросы ? Это среднее время ?
сотню раз
2) Сколько записей возвращают запросы? Если первый 10 и второй 10 000, то ...
1-й 12, 2-й 40
11 Rpik
 
03.03.23
08:16
(2) Файловая база тоже умеет "подстраиваться" (оптимизироваться) или в отличие от СУБД нужто что-то делать ручками?
12 Rpik
 
03.03.23
08:17
(4) >>Ну или тупо поле Грузополучатель у почти всех клиентов NULL ))
а вот тут в самую точку. у 95% заказов поле грузополучатель не заполнено. Поле имеет тип "Контрагент"
13 Rpik
 
03.03.23
08:20
(8) >> а без этих отборов запрос за сколько проходит?
без отбора по грузополучателю запрос выполняется  0,5 секунды на файловой базе. количество выборки 10к+
14 Rpik
 
03.03.23
08:21
(9) >Это УТ/ERP? По партнеру нет индекса разе?
это КА2, пойду искать инфу как посмотреть существующие индексы
15 lodger
 
03.03.23
10:31
(14) открываешь документ в конфиге, среди реквизитов находишь Партнер, смортишь у него свойство Индексировать
16 Rpik
 
03.03.23
10:47
(15) Спасибо, Оба реквизита не индексируются
17 magicSan
 
03.03.23
10:51
(12) и с чего бы это влиять на скорость?
18 Rpik
 
03.03.23
10:56
(17) Не совсем вас понял. количество null не влияет на скорость? или это был сарказм и это влияет напрямую?
19 Адинэснег
 
03.03.23
11:07
(12) тогда там пустая ссылка
20 Адинэснег
 
03.03.23
11:07
по 100 раз хотяб выполни, и среднее посчитай
21 magicSan
 
03.03.23
11:08
(18) во первых там пустая ссылка, во вторых если бы ыбл нулл с чего ему влять на скорость?
22 magicSan
 
03.03.23
11:09
(20) там в любом случае будет полное сканирование,  чтоб увидеть кэш достаточно одного раза
23 magicSan
 
03.03.23
11:11
(18) скока документов в базе? У тебя не скорость выполнения запроса показывает а скорость вывода скорее всего.
24 Повелитель
 
03.03.23
11:11
(0) Думаю Партнер проиндексирован, а грузополучатель Нет
25 Адинэснег
 
03.03.23
11:15
(23) щас окажется вывод 3 записей vs 3 млн
26 Адинэснег
 
03.03.23
11:15
а запрос одинаково +/- работал)
27 Rpik
 
03.03.23
11:16
по обоим реквизитам индекса НЕТ
Всего документов около 50к
в результате первого запроса выводится 159 записей(скорость 0,016 сек), в результате второго 14(скорость 3,071 сек)
28 Ivan_495
 
03.03.23
11:21
если 0.5 устраивает, то результат без отборов во врем табл, а в ней уже отбор. или смотри запрос в sql профайлере
29 magicSan
 
03.03.23
11:26
(28) чо там на него смотреть? там тоже самое
30 magicSan
 
03.03.23
11:27
(27) серверм мс?
31 НЕА123
 
03.03.23
11:30
ставлю на составной тип. все-таки.
попробуй
ВЫРАЗИТЬ(ЗаказКлиента.Грузополучатель КАК Справочник.Контрагенты)
32 magicSan
 
03.03.23
11:31
(31) ветку читай перед ставками (12
)
33 НЕА123
 
03.03.23
11:35
(32)
читал. но тут всему верить...
как измерял скорость тоже непонятно.
34 Rpik
 
03.03.23
11:35
(28) через виртуальную таблицу получилось даже дольше. примерно на 10%
35 Ivan_495
 
03.03.23
11:38
контрагенты и партнеры используется?
36 Rpik
 
03.03.23
11:46
(35) в каком смысле используются? Пользователями? в КА2 пользователям доступен справочник Партнеры. справочник "Контрагенты", как я понимаю, заполняется системой сам.
37 Ботаник Гарден Меран
 
03.03.23
11:51
КритерийОтбора
38 Rpik
 
03.03.23
12:00
(37) в конфигурации действительно присутствует КритерииОтбора.ДокументыПоПартнеру и в нем есть Реквизит Документ.ЗаказКлиента.Реквизит.Партнер

Насколько он влияет на мой запрос затрудняюсь ответить. Я все же думал он немного для других вещей (или нет?)
39 magicSan
 
03.03.23
12:01
(38) ни на сколько
40 Ботаник Гарден Меран
 
03.03.23
12:02
"При включении в конфигурацию критерия отбора система не создает никаких таблиц, однако для оптимизации поиска создается индекс по каждому реквизиту, который указан в составе критериев отбора."
RTFM
41 magicSan
 
03.03.23
12:15
(40) и для того чтоб его использовать надо использовать критерии отбора логика
42 magicSan
 
03.03.23
12:16
хотя .... (0) глянь ПолучитьСтруктуруХраненияБазыДанных()
43 timurhv
 
03.03.23
12:37
(27) Уверены? Скорее всего, он есть в критериях отбора
44 Rpik
 
03.03.23
13:04
Скорее всего вы правы. все дело в критериях отбора, а значит значительно ускорить данный запрос, простой оптимизацией нельзя
45 magicSan
 
03.03.23
13:16
(44) попробуй так

ГДЕ ЗаказКлиента.Грузополучатель = &Грузоплучатель
и ЗаказКлиента.Проведен = ИСТИНА
  и  ЗаказКлиента.ДатаОтгрузки >= ДАТАВРЕМЯ(2023, 1, 1)
    И ЗаказКлиента.ДатаОтгрузки <= ДАТАВРЕМЯ(2023, 12, 31)

(0) на 25 тысячах отработатывает мгновенно
46 Кир Пластелинин
 
03.03.23
13:17
(40) почему? если рассматривать с точки зрения субд, то при добавлении реквизита в критерии отбора будет создан индекс для таблицы (при условии, что для него не стояло индексирование изначально). а там уж оптимизатор будет строить план запроса исходя из этого
47 Rpik
 
03.03.23
13:21
(45) пробовал разницы нет. да и "почти мгновенно" это сколько в секундах?
48 Кир Пластелинин
 
03.03.23
13:28
(47) да проиндексируйте уже этот реквизит в экспериментальных целях на тестовом контуре и сделайте замеры
49 Rpik
 
03.03.23
13:38
(48) после индексации результаты по скорости выполнения выровнялись.
всем спасибо
50 magicSan
 
03.03.23
13:42
(47) нету секуд - мгновенно
51 Rpik
 
03.03.23
13:45
(50) "нету секуд - мгновенно" согласен, но вы же написали "почти мгновенно")
52 ptiz
 
03.03.23
15:37
(44) Добавь отбор по Партнеру дополнительно к отбору по Грузополучателю.
53 trad
 
03.03.23
16:12
(0) в (37) правильный ответ

(38), (39) - влияет
54 magicSan
 
03.03.23
19:41
(53) да , (40) красава "При включении в конфигурацию критерия отбора система не создает никаких таблиц, однако для оптимизации поиска создается индекс по каждому реквизиту, который указан в составе критериев отбора."
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс