|
Вопрос по производительности соединения в запросе. | ☑ | ||
---|---|---|---|---|
0
DirecTwiX
19.03.14
✎
05:31
|
Допустим, я хочу сделать полное соединение какой-нибудь таблицы с табличной частью конкретного документа. Имеет ли смысл помешать сначала табчасть во временную таблицу? Ведь отбор происходит после соединения.
|
|||
1
kosts
19.03.14
✎
06:03
|
(0) Поразмышляв, что-то не придумал как лучше... Делай как удобнее...
|
|||
2
DirecTwiX
19.03.14
✎
07:48
|
В пользу помещения во временную таблицу вроде есть аргумент) А что с запросом без ВТ?
|
|||
3
Kookish
19.03.14
✎
08:38
|
||||
4
DirecTwiX
19.03.14
✎
08:52
|
(3) Не увидел ничего, относящегося с теме.. Куда смотреть?
|
|||
5
13_Mult
19.03.14
✎
09:06
|
В данном случае смысла нет делать ВТ.
Да и соединение нужно скорее всего Внутреннее, а не полное. ) |
|||
6
DirecTwiX
19.03.14
✎
09:19
|
(5) И вообще мне нужно предопределенное значение плана видов расчета)
Почему нет смысла делать ВТ? По-моему, как раз наоборот. Да и по логике вешей |
|||
7
13_Mult
19.03.14
✎
09:42
|
(6) Если ты после (0) далее будешь использовать или соединять результат с чем либо тогда есть.
Ну а если с фанатизмом то можно взять таб1 - загнать во временную. Взять таб2 - тоже загнать во временную. Ну а потом соединить временную 1 и 2 после чего удалить временные (шутка). |
|||
8
13_Mult
19.03.14
✎
09:44
|
вот тут почитай http://kb.mista.ru/article.php?id=628
|
|||
9
13_Mult
19.03.14
✎
09:47
|
||||
10
MrStomak
19.03.14
✎
09:54
|
Думаю, для полного соединения имеет смысл ВТ, потому что вариант с условием соединения и ГДЕ Т1.Чтото is null или Т2.Ссылка = &Док как-то не выглядит оптимальным.
|
|||
11
DirecTwiX
19.03.14
✎
20:09
|
(8) И что я там должен был увидеть?
В таблице табличных частей всех документов может быть спокойно 1млн+ записей. В нужном документе 10. Если верить расчетам, то при помещении будет в 100000 меньше записей. |
|||
12
erp20
19.03.14
✎
20:40
|
(0) Полное соединение это вид соединения двух таблиц или ты про Объединение (ОБЪЕДИНИТЬ ВСЕ) двух таблиц говоришь?
Индекс полезен именно при соединении. А вот при объединении польза вряд ли будет. Для объединения больших таблиц (говорю про MSSQL) чаще всего используется следующая последовательность алгоритмов: Concatenation - http://msdn.microsoft.com/ru-ru/library/ms187919(v=sql.105).aspx затем Hash Match - http://msdn.microsoft.com/ru-ru/library/ms189582(v=sql.105).aspx т.е. для достижения максимальной скорости при объединении используются hash таблицы а не индексы. Например. Имеем такой запрос: http://f-lite.ru/lfp/s018.radikal.ru/i502/1403/ab/b2f59eb98999.png/htm Как я понял ситуация очень похожа на вашу – Объединяются две достаточно большие таблицы, одна из них остатки регистра, другая ТЧ документов. План его выполнения выглядит таким образом: http://s52.radikal.ru/i137/1403/be/9859b392d1fd.png План состоит из двух ветвей, которые в конечном итоге соединяются. В «нижней» ветке, извлекаются данные из регистра, а в верхней соответственно из ТЧ документов «Реализация товаров и услуг». Затем эти данные объединяются в одну таблицу. Вы видите, что соединяются ветки в операторе Concatenation. А после него сразу идет Hash Match, этот оператор группирует входные данные (суммирует значение колонки «Сумма Накладных» для записей с одинаковой «Точкой доставки» и «Накладной»). |
|||
13
vi0
19.03.14
✎
20:56
|
(0) Помимо теории есть смысл сделать оба варианта и посмотреть профайлером планы и их стоимость. Сравнить показатели событий RPCCompleted и SQLBatchcomleted в частности CPU, Reads, Writes
|
|||
14
floody
19.03.14
✎
22:10
|
Как правило, соединение нужно делать с табличной частью ОДНОГО конкретного документа, поэтому сначала настоятельно рекомендуется выбрать эту ТЧ во временную таблицу по условию ГДЕ Ссылка = &Ссылка, а потом уже применять соединение к временной таблице. А если вы сразу присоедините таблицу регистра к табличной части, а потом уже отберете по ссылке в условии "ГДЕ" - это сами понимаете ггг...
|
|||
15
Зойч
19.03.14
✎
22:19
|
(14) бред
|
|||
16
floody
19.03.14
✎
22:29
|
(15) обоснуйте
хотите сказать, что сначала присоедините остатки товаров ко всей таблице табчастей всех реализаций, а потом отберете по нужному документу? ну ну.. люди делятся на два типа |
|||
17
vi0
19.03.14
✎
23:47
|
(16) для оптимизатора MS SQL часто нет значения где в тексте запроса указаны условия (при одинаковой конечной выборке)
|
|||
18
DirecTwiX
20.03.14
✎
00:15
|
(14) Вот-вот. Я преследую ту же логику.
И странно, что все молчат. Вроде чуть ли не самый простой вопрос из серии оптимизации.. |
|||
19
mistеr
20.03.14
✎
01:00
|
(0) Полное соединение вообще тяжелая штука. Лучше его не делать, если есть возможность.
|
|||
20
vi0
20.03.14
✎
01:02
|
(19) полное не очень тяжелое
тяжелое декартово произведение |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |