Имя: Пароль:
1C
 
Оптимизация запроса
, ,
0 Alex_MA
 
03.03.17
08:39
Доброго утра!

Подскажите пожалуйста как оптимизировать запрос:

ВЫБРАТЬ
    vscСреднемесячныйРасходЛС.ЛицевойСчет КАК ЛицевойСчет
ПОМЕСТИТЬ ТаблицаРасчетПоСреднему
ИЗ
    Документ.vscСреднемесячныйРасходЛС КАК vscСреднемесячныйРасходЛС
ГДЕ
    vscСреднемесячныйРасходЛС.Период МЕЖДУ &ПарамДатаОт И &ПарамДатаДо
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    vscЛицевыеСчета.Ссылка КАК РезультатСсылка
ИЗ
    Справочник.vscЛицевыеСчета КАК vscЛицевыеСчета
        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаРасчетПоСреднему КАК ТаблицаРасчетПоСреднему
        ПО vscЛицевыеСчета.Ссылка = ТаблицаРасчетПоСреднему.ЛицевойСчет
ГДЕ
    ТаблицаРасчетПоСреднему.ЛицевойСчет ЕСТЬ NULL
    И vscЛицевыеСчета.ПодразделениеОрганизации = &ПарамПодразделение

В таблице vscСреднемесячныйРасходЛС  ~ 11млн. записей
В таблице vscЛицевыеСчета  ~ 650 тыс. записей.

Поле Период - индексировано. Но все равно выполняется долго, т.к. в индексе по периоду отсутствуют данные по лицевому счету. Поэтому MS SQL решает сканировать индекс по л/счету, а потом объединения хешированием.

Спасибо.
1 1dvd
 
03.03.17
08:40
сгруппировать первый запрос
2 vi0
 
03.03.17
08:43
зачем тебе временная таблица?
3 Рэйв
 
03.03.17
08:57
(0)Индексировать сделай в ВТ
4 КофеIN
 
03.03.17
15:30
ВЫБРАТЬ РАЗЛИЧНЫЕ и в первом и во втором запросе
5 Fragster
 
гуру
03.03.17
15:34
ОФФ: не первый раз вижу префикс в другой раскладке. Это такая особая форма мазохизма?
6 vi0
 
03.03.17
15:35
(4) во втором не нужно
7 КофеIN
 
03.03.17
15:37
Можно так но не уверен что быстрее:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    vscЛицевыеСчета.Ссылка КАК РезультатСсылка
ИЗ
    Справочник.vscЛицевыеСчета КАК vscЛицевыеСчета
ГДЕ
     vscЛицевыеСчета.ПодразделениеОрганизации = &ПарамПодразделение
    И НЕ vscЛицевыеСчета.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ
                vscСреднемесячныйРасходЛС.ЛицевойСчет КАК ЛицевойСчет
        ИЗ
                Документ.vscСреднемесячныйРасходЛС КАК vscСреднемесячныйРасходЛС
        ГДЕ
                vscСреднемесячныйРасходЛС.Период МЕЖДУ &ПарамДатаОт И &ПарамДатаДо)
8 КофеIN
 
03.03.17
15:39
согласен во втором не нужен))
9 vi0
 
03.03.17
15:46
(7) правильно, что не уверен
10 Fragster
 
гуру
03.03.17
15:47
можно попробовать так:


Где не 1 в (выбрать первые 1 из ВЫБРАТЬ
    vscСреднемесячныйРасходЛС.ЛицевойСчет КАК ЛицевойСчет
ИЗ
    Документ.vscСреднемесячныйРасходЛС КАК vscСреднемесячныйРасходЛС
ГДЕ
    vscСреднемесячныйРасходЛС.Период МЕЖДУ &ПарамДатаОт И &ПарамДатаДо )
11 Fragster
 
гуру
03.03.17
15:47
можно попробовать так:


Где не 1 в (выбрать первые 1 из ВЫБРАТЬ
    vscСреднемесячныйРасходЛС.ЛицевойСчет КАК ЛицевойСчет
ИЗ
    Документ.vscСреднемесячныйРасходЛС КАК vscСреднемесячныйРасходЛС
ГДЕ
vscЛицевыеСчета.Ссылка = vscСреднемесячныйРасходЛС .ЛицевойСчет
    И vscСреднемесячныйРасходЛС.Период МЕЖДУ &ПарамДатаОт И &ПарамДатаДо )
12 Fragster
 
гуру
03.03.17
15:48
индекс по лицевому счету нужен