|
Скорость выполнения запросов по оборотам с отбором по виду документа. | ☑ | ||
---|---|---|---|---|
0
Lex_Liven
12.07.15
✎
21:09
|
Всем привет. Собственно, это не вопрос, просто хочу поделиться наблюдением, которое меня удивило.
Задача: получить обороты по продажам без возвратов. Делаю два запроса. Первый:
Второй:
Удивление мое было в том, что второй запрос выполняется в 9 раз(!) быстрее! (По данным замера производительности) |
|||
1
RomanYS
12.07.15
✎
21:14
|
SQL?
А теперь выполни их в обратном порядке |
|||
2
RomanYS
12.07.15
✎
21:15
|
Кстати а результат одинаковый? или второй возвращает по строке на каждую реализацию
|
|||
3
Lex_Liven
12.07.15
✎
21:16
|
(1) файловая база.
Что значит в обратном порядке? Сначала второй, потом следом первый? Проверю. (2) Тоже проверю. |
|||
4
Lex_Liven
12.07.15
✎
21:20
|
(1) Выполнил в обратном порядке. Результаты те же - запрос, который отбирает через "ГДЕ" работает в 9 раз быстрее.
|
|||
5
RomanYS
12.07.15
✎
21:22
|
Ну тогда еще сравни с условием "ДокументПродажи ССЫЛКА Документ.РеализацияТоваровУслуг" тоже обоими способами
(4) действительно странно |
|||
6
Lex_Liven
12.07.15
✎
21:23
|
(2) Проверил число результатов выборки - ОДИНАКОВОЕ.
|
|||
7
Lex_Liven
12.07.15
✎
21:24
|
(5) Я сначала пробовал так: "ТИПЗНАЧЕНИЯ(ДокументПродажи)=ТИП(ДокументССылка.РеализацияТоваровУслуг)"
Тоже работало медленней, чем первый вариант. |
|||
8
RomanYS
12.07.15
✎
21:25
|
замерь (5) интересно
Тип дает больше возможностей чем "ссылка", вопрос скорости |
|||
9
Lex_Liven
12.07.15
✎
21:27
|
(5) Замерил.
ТИПЗНАЧЕНИЯ(ПродажиОбороты.ДокументПродажи) = &ТипДокументРеализация Процентов на 20% медленнее. Сейчас для верности поменяю их местами. |
|||
10
RomanYS
12.07.15
✎
21:29
|
(9) сделай условие как в (5)
|
|||
11
Lex_Liven
12.07.15
✎
21:29
|
(5)(9)Поменял местами. Теперь результаты почти совпали, но ССЫЛКА - чуть медленнее.
Обработка.ФронтКассира.Форма.Форма.Форма 137 РезультатЗапроса = Запрос.Выполнить(); 45 0,176614 7,68 Обработка.ФронтКассира.Форма.Форма.Форма 137 РезультатЗапроса = Запрос.Выполнить(); 45 0,176614 7,68 |
|||
12
Lex_Liven
12.07.15
✎
21:29
|
Сорри, не то
|
|||
13
Lex_Liven
12.07.15
✎
21:30
|
ССЫЛКА:
Обработка.ФронтКассира.Форма.Форма.Форма 137 РезультатЗапроса = Запрос.Выполнить(); 45 0,176614 7,68 Параметр: Обработка.ФронтКассира.Форма.Форма.Форма 105 РезультатЗапроса = Запрос.Выполнить(); 45 0,171578 7,46 |
|||
14
Lex_Liven
12.07.15
✎
21:31
|
В первом сравнении (Когда сначала через парметр, потом ССЫЛКА) было так:
Параметр: Обработка.ФронтКассира.Форма.Форма.Форма 105 РезультатЗапроса = Запрос.Выполнить(); 36 0,157122 7,36 ССЫЛКА: Обработка.ФронтКассира.Форма.Форма.Форма 137 РезультатЗапроса = Запрос.Выполнить(); 36 0,126894 5,94 |
|||
15
Lex_Liven
12.07.15
✎
21:33
|
Кто-нибудь может провести такой же эксперимент на SQL?
|
|||
16
vde69
12.07.15
✎
21:51
|
собственно ничего удивительного, тип значения не индексируемое поле а значит если оно есть в условии будет фул скан,
то есть фул скан физической таблицы на 1 лям записей конечно медленее чем сначало отбор 10 тысяч по индексу а потом фул скан этих 10 тыс. |
|||
17
H A D G E H O G s
12.07.15
✎
21:54
|
(16) глупости какие
|
|||
18
vde69
12.07.15
✎
21:55
|
(17) почему глупости?
|
|||
19
Lex_Liven
12.07.15
✎
22:04
|
(18) С фига ли тип регистратора не индексирован?
|
|||
20
H A D G E H O G s
12.07.15
✎
22:06
|
(18) с вероятность в 99% там будет поиск по кластерному индексу с условием по периоду
|
|||
21
H A D G E H O G s
12.07.15
✎
22:09
|
(16) тип значения, кстати, индексируемое поле, но тут это не поможет
|
|||
22
karabas11
12.07.15
✎
23:22
|
Глупостями занимаетесь. Работает и ладно. Вы бы еще порядок отборов начали в вирт таблице проверять. Хотя... А почему не проверили? :)
|
|||
23
PR третий
12.07.15
✎
23:26
|
(3) Ну, файловая база — это в принципе сразу все объясняет.
И еще то, что в случае сложного отбора в первом случае видимо не используется виртуальная таблица. |
|||
24
PR третий
12.07.15
✎
23:27
|
(17) Почему?
|
|||
25
PR третий
12.07.15
✎
23:27
|
(19) Регистратор индексирован, но у тебя же отбор по типузначения.
|
|||
26
PR третий
12.07.15
✎
23:28
|
(20) А по типу значения как делать отбор?
|
|||
27
H A D G E H O G s
12.07.15
✎
23:58
|
(24) Я объяснил ниже.
(23) (26) Роман Печенкин, как ушел от Мебиуса, такую иногда такую ересь гнать, что диву даешься. |
|||
28
H A D G E H O G s
13.07.15
✎
00:06
|
Вы ребята, не страдайте, просто предположите, какие индексы и насколько будут использоваться.
1) Некластерный индекс по Организации и Периоду (полностью) с key look-up в таблицу данных либо 2) Кластерный индекс по Периоду и остаточный просмотр данных. Если обороты в тот день (а там период за один день) были в основном по указанной организации и подразделению, то будет вариант 2, иначе вариант 1. Некластерный индекс по ДокументПродажи тут вообще не будет использоваться, как так он будет использован только по 2 полям (из четырех) в результате в остаточный предикат поиска попадет условие на период. Дефакто запрос отыщет все обороты с типом ДокументПродажи=РТУ и будет лопатить эту портянку до умопомрачения. |
|||
29
PR третий
13.07.15
✎
00:17
|
(28) Что-то я не заметил, где в твоих рассуждениях отбор по типу регистратора?
|
|||
30
H A D G E H O G s
13.07.15
✎
00:22
|
(29) Какого регистратора? Почитай (0). Внимательно.
|
|||
31
PR третий
13.07.15
✎
00:43
|
(30) Да, документа продажи конечно же
|
|||
32
GROOVY
13.07.15
✎
01:30
|
Смотреть план запроса и пользоваться профайлером не предлагать, так погадаем...
|
|||
33
Лодырь
13.07.15
✎
03:38
|
(32) Надо же прокачивать телепатию.
|
|||
34
Lex_Liven
13.07.15
✎
09:33
|
О чем война пошла? Я просто поделился наблюдением, неочевидным на мой взгляд. Если кому-то поможет этот пост, я буду рад.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |