Имя: Пароль:
1C
1С v8
Оптимизация запроса в 1С
,
0 SashulkaBlond
 
12.11.15
03:05
Здравствуйте, господа форумчане! 1С стала изучать недавно, поэтому прошу помочь гуру 1С, разобраться мне с такой задачей:
Имеется таблица Table1 с полями N (строка),D1,D2 (дата) и таблица Table2 с полями N (строка) и D (дата). Таблица Table1 имеет очень много строк,Table2 ,наоборот, мало. И есть запрос:
ВЫБРАТЬ Table1.N,
        Table1.D1,
        Table1.D2,
        Table2.N
ИЗ Table1 КАК Table1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Table2 КАК Table2
ПО (Table2.D МЕЖДУ Table1.D1 И Table1.D2)

Как оптимизировать запрос, чтобы уменьшить время его выполнения?
1 Sammo
 
12.11.15
05:13
Никак.
Проверить, чтобы поля были индексированы. Попробовать какими-то дополнительными условиями усечь таблицу 1 перед объединением.
Попробовать по-другому получать таблицы, чтобы не было такого условия, т.е.е пересмотреть архитектуру.
2 rphosts
 
12.11.15
05:24
(0) можно попробовать выгрузить Таблицу1 во временную таблицу пакета запросов а уже потом соединять с Таблицей2. Но не факт что:
1.поможет.
2.результат не измениться при переходе к другому способу хранения ИБ (файловая, Postgres, MS-SQL).

Кроме того можно для Т1 построить индекс по D1.

Опять-же можно попробовать скомбинировать оба способа.

В общем пробовать и мерить производительность.

PS и не надо называть так отвратительно имена полей и таблиц
3 ILM
 
гуру
12.11.15
06:30
Сначала соедини по N, помести в ТМП, потом уже внутреннее соединение с условием.
4 Горогуля
 
12.11.15
06:38
зачем по Н?
5 Demiurg
 
12.11.15
10:23
Table2 слева должна быть, а не справа
6 Ildarovich
 
12.11.15
12:28
А нельзя ли узнать "фактуру" задачи. Чтобы размеры таблиц прикинуть, диапазон значений полей и так далее. Могут ли перекрываться интервалы (D1,D2) разных записей?
Если Dх - это даты без времени, то я бы "развернул" таблицу1 по отдельным датам и пользовался соединением по условию равенства. Есть и другие неочевидные способы. Нужна фактура задачи.
7 MadJhey
 
12.11.15
12:34
(1) + поля условия соединения должны быть проиндексированы.
8 MadJhey
 
12.11.15
12:35
Посмотреть план запроса, убедится что нет сканирования таблиц.
9 Горогуля
 
12.11.15
13:42
девушка "1С стала изучать недавно", а вы тут налетели все. правильный ответ: "всё хорошо"
10 Горогуля
 
12.11.15
13:43
+(9) кроме фото в ЛК
11 SashulkaBlond
 
13.11.15
00:19
Спасибо, всем, кто отвечал по-сути, а не про фото. Фото, господин, Горогуля, в других местах размещают. Вы не заблудились, случаем?;)
12 Горогуля
 
13.11.15
05:19
(11) это ты так думаешь
13 Sammo
 
модератор
13.11.15
06:42
(11) Это традиция. Если размещена интересная фото, то больше шансов на более полные ответы
14 Drac0
 
13.11.15
06:51
(10) ты точно хочешь увидеть "её" фото: http://m.my.mail.ru/mail/vitmang/photo ? :-)
15 Горогуля
 
13.11.15
07:02
ну хотелось бы фото Александры, конечно, а не того Виталия, который её тут регистрировал ;)
16 ViSo76
 
13.11.15
09:40
(11) Без фотографии девушек-программисток не воспринимают всерьёз.
По сабжу попробуй так:

ВЫБРАТЬ
    Table2.N,
    Table2.D

ПОМЕСТИТЬ ВТ_Table2

ИЗ
    ( ВЫБРАТЬ
        МИНИМУМ( D1 ) КАК D1,
        МАКСИМУМ( D2 ) КАК D2
    ИЗ
        Table1

    ) КАК тз_Time,

    Table2

ГДЕ
    Table2.D МЕЖДУ тз_Time.D1 И тз_Time.D2

ИНДЕКСИРОВАТЬ ПО
    Table2.D
;

ВЫБРАТЬ Table1.N,
        Table1.D1,
        Table1.D2,
        ВТ_Table2.N
ИЗ
    Table1

    СОЕДИНЕНИЕ ВТ_Table2
        ПО ВТ_Table2.D МЕЖДУ Table1.D1 И Table1.D2
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший