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