◄ 1 2 |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
чувак 07.10.20 - 14:19 | Доброго дня!
Есть два запроса. Формируют одну и ту же таблицу. Но запрос2 в 3-4 раза быстрее формирует чем запрос1. По логике запрос1 быстрее должен формироваться. В чем подвох? Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ ЭСФ.СчетФактура КАК СчетФактура, ЭСФ.РегистрационныйНомер, ЭСФ.ПометкаУдаления ПОМЕСТИТЬ втЭСФ ИЗ Документ.ЭСФ КАК ЭСФ ГДЕ НЕ ЭСФ.Статус В (&СтатусОтозван) ИНДЕКСИРОВАТЬ ПО СчетФактура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РеализацияТоваровУслугТоварыПоГТД.НомерСтроки, РеализацияТоваровУслугТоварыПоГТД.ГТДДокумент КАК ГТДДокумент ПОМЕСТИТЬ ВТ_Документы ИЗ Документ.РеализацияТоваровУслуг.ТоварыПоГТД КАК РеализацияТоваровУслугТоварыПоГТД ГДЕ РеализацияТоваровУслугТоварыПоГТД.Ссылка = &Ссылка ИНДЕКСИРОВАТЬ ПО ГТДДокумент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДокументыСФ.НомерСтроки, ДокументыСФ.ГТДДокумент, ДокументыСФ.СФ, МАКСИМУМ(втЭСФ.РегистрационныйНомер) КАК РегистрационныйНомер ИЗ (ВЫБРАТЬ ВТ_Документы.НомерСтроки КАК НомерСтроки, ВТ_Документы.ГТДДокумент КАК ГТДДокумент, МАКСИМУМ(СчетФактураВыданныйДокументыОснования.Ссылка) КАК СФ ИЗ ВТ_Документы КАК ВТ_Документы ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураВыданныйДокументыОснования ПО ВТ_Документы.ГТДДокумент = СчетФактураВыданныйДокументыОснования.ДокументОснование ГДЕ СчетФактураВыданныйДокументыОснования.Ссылка В (ВЫБРАТЬ втЭСФ.СчетФактура ИЗ втЭСФ КАК втЭСФ) СГРУППИРОВАТЬ ПО ВТ_Документы.НомерСтроки, ВТ_Документы.ГТДДокумент) КАК ДокументыСФ ЛЕВОЕ СОЕДИНЕНИЕ втЭСФ КАК втЭСФ ПО ДокументыСФ.СФ = втЭСФ.СчетФактура И (НЕ втЭСФ.ПометкаУдаления) СГРУППИРОВАТЬ ПО ДокументыСФ.ГТДДокумент, ДокументыСФ.НомерСтроки, ДокументыСФ.СФ" Запрос2 = Новый Запрос; Запрос2.Текст = "ВЫБРАТЬ РеализацияТоваровУслугТоварыПоГТД.НомерСтроки, РеализацияТоваровУслугТоварыПоГТД.ГТДДокумент КАК ГТДДокумент ПОМЕСТИТЬ ВТ_Документы ИЗ Документ.РеализацияТоваровУслуг.ТоварыПоГТД КАК РеализацияТоваровУслугТоварыПоГТД ГДЕ РеализацияТоваровУслугТоварыПоГТД.Ссылка = &Ссылка ИНДЕКСИРОВАТЬ ПО ГТДДокумент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДокументыСФ.НомерСтроки, ДокументыСФ.ГТДДокумент, ДокументыСФ.СФ, МАКСИМУМ(ЭСФ.РегистрационныйНомер) КАК РегистрационныйНомер ИЗ (ВЫБРАТЬ ВТ_Документы.НомерСтроки КАК НомерСтроки, ВТ_Документы.ГТДДокумент КАК ГТДДокумент, МАКСИМУМ(СчетФактураВыданныйДокументыОснования.Ссылка) КАК СФ ИЗ ВТ_Документы КАК ВТ_Документы ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетФактураПолученный.ДокументыОснования КАК СчетФактураВыданныйДокументыОснования ПО ВТ_Документы.ГТДДокумент = СчетФактураВыданныйДокументыОснования.ДокументОснование ГДЕ СчетФактураВыданныйДокументыОснования.Ссылка В (ВЫБРАТЬ ЭСФ.СчетФактура ИЗ Документ.ЭСФ КАК ЭСФ ГДЕ НЕ ЭСФ.Статус В (&СтатусОтозван)) СГРУППИРОВАТЬ ПО ВТ_Документы.НомерСтроки, ВТ_Документы.ГТДДокумент) КАК ДокументыСФ ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭСФ КАК ЭСФ ПО ДокументыСФ.СФ = ЭСФ.СчетФактура И (НЕ ЭСФ.ПометкаУдаления) И (НЕ ЭСФ.Статус В (&СтатусОтозван)) СГРУППИРОВАТЬ ПО ДокументыСФ.ГТДДокумент, ДокументыСФ.НомерСтроки, ДокументыСФ.СФ" | ||
trad 101 - 08.10.20 - 15:12 | (100) + и если И2 - это наша ВТ, то вполне оправдано ее проиндексировать, и не утверждать что "Индексы в ВТ не нужны." | ||
H A D G E H O G s 102 - 08.10.20 - 15:12 | (100) А индексирование - это выстраивание идентификаторов записей источник в нужном порядке и построение по ним b+ дерева. | ||
H A D G E H O G s 103 - 08.10.20 - 15:13 | (101) Это если не нарвешься на hashjoin. В вашем, синтетическом, не нарвешься. | ||
trad 104 - 08.10.20 - 15:14 | (102) только двоичное дерево строится по ключу индекса, а идентификаторы записей в листьях | ||
trad 105 - 08.10.20 - 15:16 | (103) ну так все таки, индексы в ВТ бывают нужны? | ||
H A D G E H O G s 106 - 08.10.20 - 15:17 | (104) Чтобы построить дерево поиска, данные нужно отсортировать
Не находишь никакой закономерности? http://cburch.com/cs/340/reading/btree/btree-6.png | ||
H A D G E H O G s 107 - 08.10.20 - 15:19 | (105) Нужно соединять 2 таблицы, временная таблица должна быть мала (но это очевидно и так) при этом физическая таблица не должна содержать индексов по полям соединения и условие соединения должно быть больше или меньше. Да, в таком охренено распространном случае нужно индексировать. | ||
H A D G E H O G s 108 - 08.10.20 - 15:54 | На как и прогнозировалось.
Выполнил твой пример без индексов и без больше-меньше ПО т1.А = т2.А И т1.Дата = т2.Дата Прекрасный hashjoin за 0.03 секунды. http://prntscr.com/uvgw7i | ||
trad 109 - 08.10.20 - 16:34 |
◄ 1 2 |
Список тем форума |