|
Оптимизация запроса в 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 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |