Имя: Пароль:
1C
1С v8
Какой запрос быстрее?
, ,
0 PsyTech
 
19.07.13
10:59
1. Вариант1 75% (3)
2. Вариант2 25% (1)
Всего мнений: 4

Всем привет!

Какой запрос быстрее?

Вариант1:

ВЫБРАТЬ
   РегистрСв.UID,
   МАКСИМУМ(ВЫБОР
           КОГДА РегистрСв.ИмяРеквизита = "Реквизит1"
               ТОГДА РегистрСв.Значение
       КОНЕЦ) КАК Реквизит1,
   МАКСИМУМ(ВЫБОР
           КОГДА РегистрСв.ИмяРеквизита = "Реквизит2"
               ТОГДА РегистрСв.Значение
       КОНЕЦ) КАК Реквизит2,
   МАКСИМУМ(ВЫБОР
           КОГДА РегистрСв.ИмяРеквизита = "Реквизит3"
               ТОГДА РегистрСв.Значение
       КОНЕЦ) КАК Реквизит3
ИЗ
   РегистрСведений.РегистрСв КАК РегистрСв
ГДЕ
   (РегистрСв.ИмяРеквизита = "Реквизит1"
           ИЛИ РегистрСв.ИмяРеквизита = "Реквизит2"
           ИЛИ РегистрСв.ИмяРеквизита = "Реквизит3")

СГРУППИРОВАТЬ ПО
   РегистрСв.UID



Вариант2:

ВЫБРАТЬ
   РегистрСв1.UID,
   РегистрСв1.Значение КАК Реквизит1,
   РегистрСв2.Значение КАК Реквизит2,
   РегистрСв3.Значение КАК Реквизит3
ИЗ
   РегистрСведений.РегистрСв КАК РегистрСв1
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСв КАК РегистрСв2
       ПО (РегистрСв2.ИмяРеквизита = "Реквизит2")
           И РегистрСв1.UID = РегистрСв2.UID
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСв КАК РегистрСв3
       ПО (РегистрСв3.ИмяРеквизита = "Реквизит3")
           И РегистрСв1.UID = РегистрСв3.UID
ГДЕ
   РегистрСв1.ИмяРеквизита = "Реквизит1"
2 Maxus43
 
19.07.13
11:00
Имхо второй.

использование ИЛИ в ГДЕ отключает использование индексов

Вариант2