Имя: Пароль:
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"
1 wladimir90
 
19.07.13
11:00
Замер производительности попробуй сделать.
2 Maxus43
 
19.07.13
11:00
Имхо второй.

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

Вариант2
3 PsyTech
 
19.07.13
11:01
Регистр имеет 2 измерения:
UID
ИмяРеквизита
И 1 ресурс:
Значение
4 Maxus43
 
19.07.13
11:01
а вообще - результаты разные же будут
5 PsyTech
 
19.07.13
11:01
(4) почему?
6 acsent
 
19.07.13
11:03
(2) не прав, тут обычное ИмяРеквизита В (Список)
7 Fragster
 
гуру
19.07.13
11:03
я за 1

Вариант1
8 Maxus43
 
19.07.13
11:03
(5) чуство такое... в ГДЕ отбираются разные значения, в последнем случае только одно останется, в первом несколько
9 Maxus43
 
19.07.13
11:04
(6) где тут? в запросе не так. Или 1с сама ИЛИ преобразует в В?
10 PsyTech
 
19.07.13
11:04
(1) По замеру быстрее первый, но некоторые думают иначе.
11 acsent
 
19.07.13
11:04
если первого реквизита нет, то разные результаты быдут
12 acsent
 
19.07.13
11:04
попробуй ИмяРеквизита сделать 1 измерением
13 acsent
 
19.07.13
11:05
(9)Оптимизатор сиквела
14 rs_trade
 
19.07.13
11:05
такие вещи замеряют, а не спрашивают
15 PsyTech
 
19.07.13
11:06
(14) см. (10)
16 Maxus43
 
19.07.13
11:07
(13) проверял? мне вот кажется что он наставит OR и не будет индесы юзать
17 acsent
 
19.07.13
11:07
(15) конечно - у тебя ни 1 ни 2 не использует индекса
18 PsyTech
 
19.07.13
11:07
(8) результаты одинаковы будут
19 acsent
 
19.07.13
11:08
(16) ну посмотри план запроса. Хотя в случае (0) это не важно. Все равно мимо индекса
20 wladimir90
 
19.07.13
11:09
(10)(15) Не думаю что мнение авторитета перевесит реальные цифры замера. Главное правильно замерять
21 Полотенчик
 
19.07.13
11:12
(2) Я думаю если бы ИЛИ было по разным полям (даже если они были проиндексированы - например, ИЛИ по первому и второму по порядку измерениям регистра), то индекс не использовался, а т.к. здесь ИЛИ по одному и тому же полю, то нет оснований не использовать индекс.

Вариант1
22 H A D G E H O G s
 
19.07.13
11:13
1. Замерять надо правильно.
2. асцент насчет ИЛИ прав.
3. во 2 запросе - 3 поиска по регистру, тут уж как кэша SQL - хватит или нет.
23 H A D G E H O G s
 
19.07.13
11:14
Я за первый вариант.
24 Maxus43
 
19.07.13
11:17
(22) скуль сам ИЛИ по одному реквизиту преобразует в В()?
25 H A D G E H O G s
 
19.07.13
11:18
(24) нет.
26 Maxus43
 
19.07.13
11:19
(25) толик пишет (6)(13), что преобразует. где он прав тогда?
27 PsyTech
 
19.07.13
11:21
(23) Так проголосуй)
28 H A D G E H O G s
 
19.07.13
11:24
(26) Он прав в том месте, в каком оптимизатор SQL выбирает нужный план запроса.
29 viktor_vv
 
19.07.13
11:33
Что ж вы так с этим ИЛИ пстоянно спорите. Как по мне то по одному полю ИЛИ использует индекс, сли есть подходящий.
30 acsent
 
19.07.13
11:34
(29) в данном запросе все равно нет подходящего
31 viktor_vv
 
19.07.13
11:42
(30) Ну так, а народ спорит :). Просто эта рекомендация насчет использования ИЛИ всем мозг прилично запудрила, народ шарахается от него, где надо и не надо.
32 Maxus43
 
19.07.13
11:44
да, пропоганда делает дело
33 PsyTech
 
19.07.13
13:13
всего 3 голоса?!
34 RTFM_D
 
19.07.13
13:13
.

Вариант1
35 acsent
 
19.07.13
13:14
(33) зачем голосовать то? оба запроса - дерьмо ))
36 H A D G E H O G s
 
19.07.13
13:23
(35) Схрена бы?
37 PsyTech
 
19.07.13
13:23
(35) предложи лучше