Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

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

↓ [Волшебник, 10.11.17 - 11:12]
Какой запрос будет быстрее
Я
   arsik
 
09.11.17 - 15:17
4. Свой вариант54% (7)
2. Вариант 238% (5)
3. Вариант 38% (1)
1. Вариант 10% (0)
Всего мнений: 13

Вариант 1
ВЫБРАТЬ
    ЗаказНаряд.Ссылка
ИЗ
    Документ.ЗаказНаряд КАК ЗаказНаряд
ГДЕ
    ЗаказНаряд.Основание ССЫЛКА Документ.ЗаказПокупателя
    И ЗаказНаряд.Основание = &Основание


Вариант 2
ВЫБРАТЬ
    ЗаказНаряд.Ссылка
ИЗ
    Документ.ЗаказНаряд КАК ЗаказНаряд
ГДЕ
    ЗаказНаряд.Основание = &Основание


Вариант 3
ВЫБРАТЬ
    ЗаказНаряд.Ссылка
ИЗ
    Документ.ЗаказНаряд КАК ЗаказНаряд
ГДЕ
    (ВЫРАЗИТЬ(ЗаказНаряд.Основание КАК Документ.ЗаказПокупателя)) = &Основание

ЗаказНаряд.Основание - Составной тип - все документы
 
 
   Borteg
 
1 - 09.11.17 - 15:21
2

2. Вариант 2
   Джинн
 
2 - 09.11.17 - 15:26
Вы больше времени на написание сабжа потратили, чем потратили бы на замер.
   arsik
 
3 - 09.11.17 - 15:27
(2) Для замера нет наполненной базы.
   ptiz
 
4 - 09.11.17 - 15:28
Пофиг

4. Свой вариант
   Dmitrii
 
5 - 09.11.17 - 15:29
(0) Не будет разницы

4. Свой вариант
   DrShad
 
6 - 09.11.17 - 15:29
того что будет быстрее здесь нет

4. Свой вариант
   Филиал-msk
 
7 - 09.11.17 - 15:31
(0) До варианта с ТИПЗНАЧЕНИЯ(...) = ТИП(...) не догадался?
   antgrom
 
8 - 09.11.17 - 15:34
(0) при большом количестве документов , любой запрос содержащий ГДЕ будет долгим.

4. Свой вариант
   DrShad
 
9 - 09.11.17 - 15:35
(8) +1
нужно брать из регистров где Основание либо измерение либо часть измерения как в УТ 11
   Borteg
 
10 - 09.11.17 - 15:40
(9) достаточно проиндексировать реквизит..
 
 Рекламное место пустует
   xXeNoNx
 
11 - 09.11.17 - 15:42
(0) Посмотри план запроса
   xXeNoNx
 
12 - 09.11.17 - 15:43
вариант 2

2. Вариант 2
   Черный маклер
 
13 - 09.11.17 - 15:43
(10) интересный индекс получится у составного реквизита :)
   Borteg
 
14 - 09.11.17 - 15:44
(0) главное чтобы на реквизите основание был индекс и вариант 2.
вариант 3 самое страшное что можно сделать при составном типе.
   Borteg
 
15 - 09.11.17 - 15:44
(13) эмм?обычный индекс по ссылке, а что там будет индексироваться еще?
   Черный маклер
 
16 - 09.11.17 - 15:45
(0) без условия по Дате любой запрос будет неспешным
   Borteg
 
17 - 09.11.17 - 15:46
(16) сейчас все кластерные индексы в 1с нервно засуетились)
   arsik
 
18 - 09.11.17 - 15:56
(7) 8.1 - там такого нет
   Филиал-msk
 
19 - 09.11.17 - 15:58
(18) Ты прикинь, в 7.7 тоже нет!
   Dmitry1c
 
20 - 09.11.17 - 15:59
Филиал специальной олимпиады на мисте
   mistеr
 
21 - 09.11.17 - 16:28
Не будет лишних соединений.

2. Вариант 2
   Анцеранана
 
22 - 09.11.17 - 16:59
Согласен с (9).
Если с регистром не взлетает - я за вариант (2) из приведенных, но что-то мне подсказывает, что тут можно как-то быстрее. Возможен ли вариант с ВЫРАЗИТЬ не в ГДЕ, как вы думаете? Может это ОНО как раз?

4. Свой вариант
   Филиал-msk
 
23 - 09.11.17 - 17:03
(22) >  Возможен ли вариант с ВЫРАЗИТЬ не в ГДЕ, как вы думаете? Может это ОНО как раз?

Зачем?

(20) Перепись лауреатов
   mistеr
 
24 - 09.11.17 - 17:04
(22) Зависит от того, что дальше собираемся делать с выбранными доками.
   DrShad
 
25 - 09.11.17 - 17:09
(24) в данном виде запросов не имеет значения
   Aloex
 
26 - 09.11.17 - 17:14
Вариант 4 Внутреннее соединение.

4. Свой вариант
   Cyberhawk
 
27 - 09.11.17 - 17:45
Сравни планы запросов и тексты запросов СУБД, запили статью на ИС, доложи о результатах
   Бычье сердце
 
28 - 09.11.17 - 17:50
Выборка = Документы.ЗаказНаряд.Выбрать();
    Пока Выборка.Следующий() Цикл
.....................
   Бычье сердце
 
29 - 09.11.17 - 17:50
Нормальный вариант.
   breezee
 
30 - 09.11.17 - 18:03
(13) Вроде по каждой таблице будет индекс
В 1 и 2 вроде(!вроде) на уровня СУБД должно призойти соединение со всем таблицами и составного типа и будет искать, метод поиска будет зависить от того индексирован ли реквизит. Надо бы посомтреть план выполнения, чтобы понять точно что там 1С будет делать и как это оптимизирует СУБД

3. Вариант 3
   Numerus Mikhail
 
31 - 09.11.17 - 19:04
(28) Чего уж мелочиться
Найдено = Ложь;
Пока НЕ Найдено Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ ПЕРВЫЕ 1
    |    ЗаказНаряд.Ссылка
    |ИЗ
    |    Документ.ЗаказНаряд КАК ЗаказНаряд";
    
    Если Выборка.Следующий() Тогда
        Если Выборка.Ссылка.Основание = МоеОснование Тогда
            НужныйДокумент = Выборка.Ссылка;
            Найдено = Истина;
        Иначе 
            НенужныйОбъект = Выборка.Ссылка.ПолучитьОбъект();
            НенужныйОбъект.Удалить();
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
   Лефмихалыч
 
32 - 09.11.17 - 19:22
(31) транзакцию забыл перед циклом
   Genayo
 
33 - 09.11.17 - 19:37
(3) Могу завтра проверить на базе с 33 млн записей в таблице :)
 
 
   Borteg
 
34 - 09.11.17 - 21:37
(30) Вы о чем?((
   Borteg
 
35 - 09.11.17 - 21:37
(22) выразить используется только когда получается реквизит через точку от составного типа.
   ВыборИногда
 
36 - 10.11.17 - 00:02
(0)
Вводные - платформа 8.3.8.2008, количество документов 725107, индекс по полю ДокументОснование

1) План - Index Seek, условие
((T1._Fld18680_TYPE = 0x08 AND T1._Fld18680_RTRef = 0x00005A8B) AND (T1._Fld18680_TYPE = 0x08 AND T1._Fld18680_RTRef = 0x00005A8B AND T1._Fld18680_RRRef = @P2))
Количество чтений 3 шт
2)  План - Index Seek, условие
((T1._Fld18680_TYPE = 0x08 AND T1._Fld18680_RTRef = 0x00005A8B AND T1._Fld18680_RRRef = @P2))
Количество чтений 3 шт
3) План - Index Scan, условие
((CASE WHEN T1._Fld18680_TYPE = 0x08 AND T1._Fld18680_RTRef = 0x00005A8B THEN T1._Fld18680_RRRef END = @P2))
Количество чтений 4361

Итого имеем - третий запрос самый медленный, второй и первый одинаковые, значит условие по ссылке не нужно.
   youalex
 
37 - 10.11.17 - 00:36
(35) >>выразить используется только когда получается реквизит через точку от составного типа.

Плюс, еще, если нужно ограничить тип полей - в результате запроса или во временной таблице. В случае с вт- без "выразить" в запросе помещения в вт -  зловредность пресловутой "точки" перетекает и в последующие запросы пакета.
Имхо,  это единственный случай, когда стоит использовать "Выразить".
В случае получения реквизита через точку - явное соединение с таблицей (таблицами)  будет и нагляднее и более предсказуемым с точки зрения поведения платформы.
   Antony8x
 
38 - 10.11.17 - 06:26
2 меньше комманд с БД

2. Вариант 2
   МимохожийОднако
 
39 - 10.11.17 - 06:37
(3) На полупустой базе измерять бессмыссленно. При заполненной базе иногда "неправильные" запросы дадут бОльший эффект.

4. Свой вариант
   d4rkmesa
 
40 - 10.11.17 - 11:07
(0) Если Основание проиндексировано, 2 по идее быстрее, но в реальности скорее всего одинаково. 3-й вариант вообще бессмыслен.

2. Вариант 2


Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует