Имя: Пароль:
1C
 
Как быстрее(добавлять индекс в отбор или нет)?
0 posq
 
08.09.15
11:45
Замерить не могу. Интересует теория. Подскажите, есть два банальных вопроса.

Имеем: Документ "Наряд" > 1 000 000 записей.
У документа есть не индексируемый реквизит "Дата начала" по которому необходимо выполнить .

Вопрос 1:
Будет ли выборка работать быстрее если указать хоть какой нибудь отбор по индексируемому полю(в моем случае по дате документа)?  Например:

ВЫБРАТЬ
    Номер,
    Дата,
    Организация,
    Ссылка
ИЗ
    Документ.Наряд
ГДЕ
    Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, -4) И &ДатаКонца
    И ДатаНачала МЕЖДУ &ДатаНачала И &ДатаКонца
    И НЕ ПометкаУдаления



По моему мнению будет работать быстрее если указать отбор по дате (Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, -4)).

Вопрос 2:

Будет ли работать быстрее если предварительно наложить только первый отбор, поместив результат во временную таблицу, а потом на записи во временной таблице уже наложить отбор на "ДатаНачала"(возможно предварительно проиндексировав ее во ВТ)?


P.S. Очевидно что на практике выборка из реальных таблиц документов это ужасно и нужно разрабатывать так что бы под подобную выборку существовал регистр. На это внимание обращать не нужно.
1 mistеr
 
08.09.15
11:51
1. Это зависит от того, насколько эффективным будет этот дополнительный отбор сам по себе. Если между &ДатаНачала и &ДатаКонца попадают почти все документы, или даже половина, то смысла нет. Если хотя бы 80% отсекается, то смысл есть.

2. Нет, одним запросом будет быстрее.

P.S. Ничего ужасного в выборке из таблиц документов нет. Все зависит от задачи.
2 Ёпрст
 
08.09.15
11:52
(0)

вот это

ГДЕ
    Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&ДатаНачала, МЕСЯЦ, -4) И &ДатаКонца
    И ДатаНачала МЕЖДУ &ДатаНачала И &ДатаКонца

эквивалентно этому

ГДЕ
   ДатаНачала МЕЖДУ &ДатаНачала И &ДатаКонца
3 Ёпрст
 
08.09.15
11:53
чего надо автору - хз.
4 Матиус
 
08.09.15
11:55
(3) автору надо почитать книжку в тему
5 Fragster
 
гуру
08.09.15
11:58
(2)(3) Дата <> ДатаНачала
6 D3O
 
08.09.15
11:58
(2) не всегда. Дата может и не равняться ДатаНачала. И значительно. в том числе и больше чем на 4 месяца
7 Ёпрст
 
08.09.15
11:58
(5) ага, не увидел
8 posq
 
08.09.15
12:03
(2) После отбора по дате документа у меня будут документы за 4 месяца, после наложения второго отбора у меня будут документы за один нужный мне день.

(3) Автору нужно убедится в верности того как он пишет.

Нужно ли предварительно по индексируемому полу из 1 000 000 записей получать сначала 70 000 записей, а потом из них выбрать нужную 1000.

(4) Подскажи какую, спасибо скажу. Про индексы все что в сети нашел прочитал, но там в основном одно и то же с партнерского раздела сайта 1С.(технологии крупных внедрений). Был бы рад если бы указали где на примерах подробно расписано про оптимизацию запросов.

(5), (6) угу, дата документа не равна реквизиту "ДатаНачала"
9 Ёпрст
 
08.09.15
12:10
(8) добавь индекс на дату, жалко что ле ?
10 posq
 
08.09.15
12:14
(9) Добавить можно все что угодно и разработать как угодно, вопрос в другом. Меня не конкретный пример интересует, меня интересует "теория", как будет быстрее? Что бы быть уверенным что каждый день в подобных запросах верно запросы пишу.
11 ГеннадийУО
 
08.09.15
12:29
(10) Теория одна - берешь с ИТС консоль запросов с просмотром планов запросов, запускаешь оба варианта, думаешь...
12 posq
 
08.09.15
12:37
(11) Вот думал не я же один подобные запросы пишу. Люди же каждый день сталкиваются. Или те кто об оптимальности задумывается все заняты и на форуме не сидят.
13 mistеr
 
08.09.15
17:03
(11) Вредный совет. Втыкать в планы на каждый чих - терять время и деньги. (Если только не стоит задача самообразования). Смотреть планы нужно, если есть проблемы с производительностью.

Для повседневного запросописания достаточно нескольких простых правил. В данном случае правило такое: дополнительный отбор, уменьшающий кардинальность выборки, скорее всего поможет и вряд ли помешает.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.