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


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 человек.
Рекламное место пустует