Кіріспе
Реляциялық деректер базасында қолданылатын алгоритм. Хеш-қосылу – біріктіру алгоритмінің мысалы және реляциялық деректерді басқару жүйесін іске асыруда қолданылады. Хеш-қосылу алгоритмінің барлық түрлері біріктірілген реляциялардың бірінің немесе екеуінің де түйіндерінен хэш-кестелер құруды және кейіннен осы кестелерді іздеуді қамтиды, сонда тек бірдей хэш-коды бар түйіндер ғана эквижойнда теңдік үшін салыстырылады. Хеш-қосылулар әдетте ұялы циклдармен біріктіруге қарағанда тиімдірек, бірақ біріктірудің іздеу бөлігі өте кішкентай болған жағдайда тиімділігі төмендейді. Оларға эквижойнд предикаты қажет (бір немесе бірнеше бағандағы "=" теңдік операторларының біріктірілуін пайдалана отырып, бір кестедегі жазбаларды екінші кестедегі жазбалармен салыстыратын предикат).
The hash join is an example of a join algorithm and is used in the implementation of a relational database management system. All variants of hash join algorithms involve building hash tables from the tuples of one or both of the joined relations, and subsequently probing those tables so that only tuples with the same hash code need to be compared for equality in equijoins. Hash joins are typically more efficient than nested loops joins, except when the probe side of the join is very small. They require an equijoin predicate (a predicate comparing records from one table with those from the other table using a conjunction of equality operators '=' on one or more columns).
Грейс Хаш қосылыңыз
Жақсырақ тәсіл "Grace hash join" деп аталады, ол алғаш рет іске асырылған GRACE деректер базасы машинасының атымен аталған. Бұл алгоритм екі қатынасты да хэш-функция арқылы бөліп, осы бөліктерді дискіге жазу арқылы бүкіл қатынасты қайта сканерлеу қажеттілігінен қытықтайды. Содан кейін алгоритм парлы бөлімдерді жадыға жүктейді, кішігірім бөлімделген қатынас үшін хэш-кесте құрайды және ағымдағы хэш-кестемен сәйкес келетін жазбаларды іздеу үшін екінші қатынасты тексереді. Партициялар join кілті бойынша хэштелгендіктен, join нәтижесіндегі кез келген жазба бір партицияға жатуы керек. Бір немесе бірнеше партициялар қолданылатын жады көлеміне сыймаса, алгоритм рекурсивті түрде қолданылады: үлкен партицияны кіші партицияларға бөлу үшін қосымша ортогональді хэш-функция таңдалады, содан кейін олар бұрынғыдай өңделеді. Бұл операция қымбат болғандықтан, алгоритм бастапқы бөлу кезеңінде ең кішкентай партицияларды құру арқылы мұндай жағдайдың туындау ықтималдығын азайтуға тырысады.
Ауысқа қарсы
Хеш қосылыстары анти-қосылу шарты үшін де қарастырылуы мүмкін (бір кестеде екінші кестеде сәйкес мәндер табылмағанда мәндерді таңдайтын шарт). Кестелердің көлеміне қарай, әртүрлі алгоритмдер қолданылуы мүмкін:
Алаш сол жақтан қосылуға қарсы
JOIN-нің NOT IN жағы үшін хэш-кесте дайындалатын болсын. Екінші кестені қарап шығып, join атрибуты хэш-кестеде бос жазбаға сәйкес келетін кез келген қатарларды таңдаңыз. NOT IN кестесі FROM кестесінен кіші болғанда бұл тиімдірек болады.
Хаш оң жаққа қарсы
Қосудың FROM жағы үшін хэш-кесте дайындаңыз. NOT IN кестесін қарап шығып, хэш-тестілеу кезінде сәйкес келетін жазбаларды хэш-кестеден жойыңыз. Хэш-кестеде қалған барлық деректерді қайтарыңыз. Бұл әдіс NOT IN кестесі FROM кестесінен үлкен болғанда тиімдірек болады.
Сол жақтағы жартылай қосылған қышқыл
IN жағы үшін хэш-кесте дайындалатын болады. Басқа кестені қарап шығып, хэш-сәйкестілік тудырған әрбір қатар қайтарылады. Жазбалар сәйкестілік табылған бойда дереу қайтарылады. Хэш-кестедегі нақты жазбалар назарға алынбайды. IN кестесі FROM кестесінен кіші болған жағдайда бұл әдіс тиімдірек.
Оң жарым-жартылай қосылған
Қосудың FROM жағына хэш-кесте дайындалатын болады. IN кестесі сканерленеді, хэш-кестеден сәйкес жазбалар қайтарылып, дереу жойылады. Осы алгоритм бойынша хэш-кестедегі (яғни, FROM кестесіндегі) әр жазба бір рет ғана қайтарыла алады, себебі ол қайтарылғаннан кейін жойылады. IN кестесі FROM кестесінен үлкен болған жағдайда бұл тиімдірек.