Съединяването за "сливане на сортиране" се извършва чрез сортиране на двата набора от данни, които трябва да бъдат обединени, според ключовете за свързване и след това обединяването им. Сливането е много евтино, но сортирането може да бъде непосилно скъпо, особено ако сортирането се разлее на диск. Цената на сортирането може да бъде намалена, ако един от наборите от данни може да бъде достъпен в сортиран ред чрез индекс, въпреки че достъпът до голяма част от блоковете на таблица чрез сканиране на индекс също може да бъде много скъп в сравнение с пълно сканиране на таблица .
Хеш присъединяването се извършва чрез хеширане на един набор от данни в паметта въз основа на колони за присъединяване и четене на другия и изследване на хеш таблицата за съвпадения. Хеш присъединяването е с много ниска цена, когато хеш таблицата може да се съхранява изцяло в паметта, като общата цена възлиза на много малко повече от цената за четене на наборите от данни. Цената нараства, ако хеш таблицата трябва да се разлее на диск при еднопроходно сортиране и се повишава значително за многопроходно сортиране.
(В преди 10g външните свързвания от голяма към малка таблица бяха проблематични по отношение на производителността, тъй като оптимизаторът не можеше да разреши необходимостта от достъп първо до по-малката таблица за хеш присъединяване, но първо до по-голямата таблица за външно съединение. Следователно хеш обединяванията не бяха налични в тази ситуация).
Цената на хеш присъединяването може да бъде намалена чрез разделяне на двете таблици на ключ(ове) за свързване. Това позволява на оптимизатора да заключи, че редовете от дял в една таблица ще намерят съвпадение само в конкретен дял на другата таблица, а за таблици с n дяла хеш присъединяването се изпълнява като n независими хеш съединения. Това има следните ефекти:
- Размерът на всяка хеш таблица е намален, като по този начин се намалява максималното количество необходима памет и потенциално се премахва необходимостта операцията да изисква временно дисково пространство.
- За операции с паралелни заявки количеството на обмен на съобщения между процеси е значително намалено, намалявайки използването на процесора и подобрявайки производителността, тъй като всяко хеш присъединяване може да се извърши от една двойка PQ процеси.
- За непаралелни операции на заявка изискването за памет се намалява с коефициент n и първите редове се проектират от заявката по-рано.
Трябва да отбележите, че хеш обединяванията могат да се използват само за равнопоставени обединения, но обединяванията с обединяване са по-гъвкави.
Като цяло, ако обединявате големи количества данни в equi-join, тогава хеш присъединяването ще бъде по-добър залог.
Тази тема е много добре обхваната в документацията.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523
12.1 документи:https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm