Имя: Пароль:
1C
1С v8
Что быстрее соединение или В
🠗 (Волшебник 27.12.2017 16:17)
,
0 TolikoSprosit
 
27.12.17
16:12
Что быстрее отработает:

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

или

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

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

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


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

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

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