Вход | Регистрация


1С:Предприятие ::

Метки: 

Что быстрее соединение или В

↓ [Волшебник, 27.12.17 - 16:17]
Я
   TolikoSprosit
 
27.12.17 - 16:12
Что быстрее отработает:
"ВЫБРАТЬ Спр.Ссылка Из Справочник.Справочник КАК Спр ГДЕ Спр.Реквизит В (ВЫБРАТЬ тз.Ссылка ИЗ тз)"

или

"ВЫБРАТЬ Спр.Ссылка ИЗ Тз ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Справочник КАК Спр ГДЕ тз.Ссылка = Спр.Реквизит"

Если Спр.Реквизит - индексированное поле.
 
  Рекламное место пустует
   aka AMIGO
 
1 - 27.12.17 - 16:16
Произведи замер производительности, да сообщи здесь
   Волшебник
 
Модератор
2 - 27.12.17 - 16:17
(0) Произведи замер и доложи
   rs_trade
 
3 - 27.12.17 - 16:17
(0) на ms sql скорее всего примерно одинаково будет
   SSSSS_AAAAA
 
4 - 27.12.17 - 16:18
(0) Один из стандартных вопросов про коня в вакууме...
Если есть несколько разных спосбов получить результат, то, почему-то, некоторые думают, что один из этих способов обязательно лучше всех в любом случае. Не понятно только зачем тогда нужны остальные способы...
Тесты, и только тесты на вашей конкретной системе и конкретных данных могут выявить победителя.
   TolikoSprosit
 
5 - 27.12.17 - 16:18
У меня быстрее первый вариант, но я не понимаю почему. Я списываю все на файловую базу.
   rs_trade
 
6 - 27.12.17 - 16:19
(5) с файловой базой до свидания
   youalex
 
7 - 27.12.17 - 16:19
(0) писать условия соединения в секции не ГДЕ не есть комильфо
   vde69
 
8 - 27.12.17 - 16:19
для небольшого по размеру параметру оператор "В" конвертируется в много "ИЛИ"

соединение даже по индексированому полю вполне может пойти по фулскан ....


по этому все зависит от конкретного контекста...
   Fragster
 
9 - 27.12.17 - 16:20
   TolikoSprosit
 
10 - 27.12.17 - 16:23
Я понимаю, что все от конкретного случая, но в вакууме то как правильно сделать?)) Смысл в том, что тз может быть и 2 строчки и 20000.
 
 
   Волшебник
 
Модератор
11 - 27.12.17 - 16:25
с файловой базой до свидания
   Fragster
 
12 - 27.12.17 - 16:26
(10) если тогда иначе конецесли
   TolikoSprosit
 
13 - 27.12.17 - 16:27
Ну я могу тестировать только на файловой, но работать это будет на сервере.
   TolikoSprosit
 
14 - 27.12.17 - 16:28
Была бы у меня возможность замерять производительность в рабочей базе, я бы вам не писал пасаны;)
   rs_trade
 
15 - 27.12.17 - 16:29
(13) на сервере, но в файловой?
   piter3
 
16 - 27.12.17 - 16:30
(14) Проблема в чем?Сделать копию на скуле
   TolikoSprosit
 
17 - 27.12.17 - 16:30
(16) Нет скуля у меня)
   TolikoSprosit
 
18 - 27.12.17 - 16:31
(15) нет все православно, на скуле.
   rs_trade
 
19 - 27.12.17 - 16:34
(17) так и разработку надо на сиквеле вести тогда. очень сильно отличается исполнение запросов.
   TolikoSprosit
 
20 - 27.12.17 - 16:37
(19) Это я тоже понимаю, но есть что есть. Скуль в цоде, цод в жо..
   SSSSS_AAAAA
 
21 - 27.12.17 - 16:38
(17) Ну так поставь.
   ILM
 
22 - 27.12.17 - 16:41
Соединение должно быть внутреннее по полю с индексом
   TolikoSprosit
 
23 - 27.12.17 - 16:44
Я хотел чтобы умный человек написал, что то вроде: ГДЕ быстрее при маленькой тз, соединение быстрее при большой тз, потому что..

а не вот это вот все) Ставить скуль, замерять производительность, смотреть планы, не так быстро как хотелось бы)
   Fragster
 
24 - 27.12.17 - 16:45
(21) сервер 1с тоже "поставь"?
   ILM
 
25 - 27.12.17 - 16:48
ГДЕ и соединение будут ВСЕГДА быстрее по равенству, медленнее по диапазону и больше-меньше-равно.
   TolikoSprosit
 
26 - 27.12.17 - 16:50
(22) А вы уверены что внутренее быстрее левого? или это про NULLи.
(25) Это понятно, но как это относится к моей задаче?)
   SSSSS_AAAAA
 
27 - 27.12.17 - 16:52
(24) А почему бы и нет? У меня стоит и не жужжит.
В (19) правильно написано.
   ILM
 
28 - 27.12.17 - 16:53
(26) Поверь, в 99% случаях да.
   TolikoSprosit
 
29 - 27.12.17 - 16:56
(27) Локальная машина не сервер. Все равно не те ощущения))
   ILM
 
30 - 27.12.17 - 16:58
Я про SQL и говорю
   rs_trade
 
31 - 27.12.17 - 16:58
(23) так субд может один план выбрать для этих двух запросов
   TolikoSprosit
 
32 - 27.12.17 - 16:59
(28) Кто-то мне говорил, что внутренее это полное, только с доп условиями, я с тех пор избегаю если могу.
   TolikoSprosit
 
33 - 27.12.17 - 17:00
(31) НУ я не хочу под конкретный оптимизатор писать) Мне интересно, что в общем случае будет.
 
 
   rs_trade
 
34 - 27.12.17 - 17:05
(32) это логика работы, а не физика исполнения. все соединения кроме кросса это декартово с условием. по логике работы.
   kuzyara
 
35 - 27.12.17 - 17:10
///////////1////////////

ВЫБРАТЬ тз.Ссылка поместить тз ИЗ &тз КАК тз;
ВЫБРАТЬ Номенклатура.Ссылка
ИЗ Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.ЦеноваяГруппа В (ВЫБРАТЬ тз.Ссылка ИЗ тз)
    
Fields:(
    Номенклатура_T1.Ссылка
)
Справочник.Номенклатура (Номенклатура_T1) RANGE SCAN USING INDEX (_REFERENC31_BYFIELD6377_RR) (1 fields)
WHERE
        Номенклатура_T1.ЦеноваяГруппа IN(
(SELECT
                Fields:(
                    T2._Q_000_F_000RRef
                )
                #T1f883794753d47fc99c0ecf4e48411bf (T2) FULL SCAN



                WITHOUT DUPLICATES
                )            )

Statistics: RecordsScanned = 45, ParseTime = 0, ExecuteTime = 0, BuffersMemory = 40044, ResultRecords = 42, RecordSize = 18
///////////2////////////

ВЫБРАТЬ тз.Ссылка поместить тз ИЗ &тз КАК тз;
ВЫБРАТЬ Номенклатура.Ссылка 
ИЗ Тз как тз ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
по тз.Ссылка = Номенклатура.ЦеноваяГруппа
Fields:(
    Номенклатура_T2.Ссылка
)
#T5f9298c02e64451faba9ba7723f1d943 (T1) FULL SCAN


NESTED OUTER LOOP
Справочник.Номенклатура (Номенклатура_T2) RANGE SCAN USING INDEX (_REFERENC31_BYFIELD6377_RR) (1 fields)
WHERE
        (T1._Q_000_F_000RRef = Номенклатура_T2.ЦеноваяГруппа)

Statistics: RecordsScanned = 45, ParseTime = 0, ExecuteTime = 0, BuffersMemory = 40044, ResultRecords = 42, RecordSize = 18

RANGE SCAN USING INDEX vs Nested loop RANGE SCAN USING INDEX
   rs_trade
 
36 - 27.12.17 - 17:11
быстрее отработает если ТЗ заменить на подзапрос, с условием что там достаточно простой запрос. без создания врем. таблицы тогда обойдется исполнение.
   TolikoSprosit
 
37 - 27.12.17 - 17:19
(35) Я правильно понял, что первый лучше, потому что цикла нет?
   kuzyara
 
38 - 27.12.17 - 17:29
Несмотря на кучу бесполезных комментариев вопрос на самом деле интересный.
Возможно, тебе помогут в нем разобраться эти ссылки:
https://www.sqlite.org/eqp.html
https://www.sqlite.org/queryplanner.html
https://stackoverflow.com/questions/1454188/how-can-i-analyse-a-sqlite-query-execution
   kuzyara
 
39 - 27.12.17 - 17:37
Инструмены разработчика - Консоль запросов - Запрос результата - Трасса

Когда раскуришь опкоды файлового движка бд - ты сможешь ответить на свой вопрос.
   rs_trade
 
40 - 27.12.17 - 18:01
(37) по итоговой стоимости посмотри



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует