All Products
Search
Document Center

PolarDB:Percepat hash join dengan eksekusi paralel

Last Updated:Aug 27, 2026

Metode hash join, yang diperkenalkan dalam MySQL Community Edition 8.0, secara signifikan meningkatkan performa kueri analitik. PolarDB for MySQL 8.0 mendukung eksekusi paralel untuk hash join dengan serangkaian strategi yang terus berkembang. Topik ini menjelaskan cara menggunakan fitur hash join untuk parallel queries di PolarDB.

Hash join paralel sederhana

Prasyarat

Kluster Anda harus merupakan PolarDB for MySQL 8.0 Cluster Edition yang menjalankan revision version 8.0.2.1.0 atau lebih baru. Untuk memeriksa versi Anda, lihat Query the engine version.

Strategi paralel并行策略

Gambar tersebut menunjukkan execution plan untuk parallel query dengan tingkat paralelisme (DOP) sebesar 4. Artinya, PolarDB menggunakan empat workers untuk memindai bagian berbeda dari table t1 secara konkuren. Setiap worker membangun hash table-nya sendiri menggunakan bagian datanya dari t1. Hash tables ini kemudian digabungkan dengan seluruh table t2. Terakhir, sebuah leader mengumpulkan hasil dari semua workers.

Penggunaan

  • Sintaksis:

    Di PolarDB, gunakan pernyataan EXPLAIN FORMAT=TREE untuk melihat operasi hash join dalam execution plan.

  • Contoh:

    Contoh berikut membuat dua tables dan memasukkan data sampel:

    CREATE TABLE t1 (c1 INT, c2 INT);
    CREATE TABLE t2 (c1 INT, c2 INT);
    
    INSERT t1(c1, c2) 
    WITH RECURSIVE seq AS (
      SELECT 1 AS a, 1 AS b
      UNION ALL
      SELECT a + 1, b + 1 FROM seq WHERE a < 1000
    )
    SELECT a,b FROM seq;
    
    INSERT INTO t2 SELECT * FROM t1;

    Lihat execution plan untuk pernyataan SQL berikut:

    EXPLAIN FORMAT=TREE SELECT /*+ PQ_DISTRIBUTE(t1 PQ_NONE) PQ_DISTRIBUTE(t2 PQ_NONE) */ * FROM t1 JOIN t2 ON t1.c1 = t2.c2;
    EXPLAIN FORMAT=TREE
     EXPLAIN
      -> Gather (slice: 1; workers: 4)  (cost=10.82 rows=4)
        -> Parallel inner hash join (t2.c2 = t1.c1)  (cost=0.57 rows=1)
            -> Parallel table scan on t2, with parallel partitions: 1  (cost=0.03 rows=1)
            -> Parallel hash
                -> Parallel table scan on t1, with parallel partitions: 1  (cost=0.16 rows=1)

    Contoh di atas menunjukkan rencana eksekusi paralel dengan tingkat paralelisme (DOP) sebesar 4. Artinya, PolarDB menjalankan empat worker untuk mengeksekusi kueri. Dalam rencana ini, tabel t1 menjalani Pemindaian Paralel. Keempat worker memindai bagian berbeda dari tabel ini. Setiap worker menggunakan bagian datanya dari t1 untuk membangun tabel hash, lalu melakukan operasi JOIN dengan seluruh tabel t2. Terakhir, leader mengumpulkan hasil dari semua worker untuk menghasilkan hasil akhir kueri.

Shuffle hash join

Prasyarat

Kluster Anda harus merupakan PolarDB for MySQL 8.0 Cluster Edition yang menjalankan revision version 8.0.2.2.0 atau lebih baru. Untuk memeriksa versi Anda, lihat Query the engine version.

Strategi paralel并行策略

Hash join paralel mengeksekusi fase build dan probe secara paralel. Namun, jika hash table bersama terlalu besar untuk muat di memori, data tersebut akan disimpan ke disk, sehingga menimbulkan overhead I/O dan mengurangi efisiensi kueri. Strategi shuffle hash join mengatasi hal ini dengan mempartisi ulang data dari kedua tabel. Seperti yang ditunjukkan pada gambar, proses dimulai dengan pemindaian paralel pada table t1, di mana beberapa workers memindai table tersebut secara konkuren. Setiap worker kemudian mempartisi ulang (shuffles) datanya ke sekumpulan workers kedua berdasarkan join key. Hal ini memungkinkan setiap worker pada kelompok kedua untuk membangun hash table lokal yang lebih kecil dari partisi data di t1. Setelah fase build selesai, pemindaian paralel dimulai pada table t2. Data dari t2 juga dipartisi ulang berdasarkan join key dan dikirim ke workers yang menyimpan partisi hash table yang sesuai. Setiap worker kemudian melakukan operasi probe pada partisi data lokalnya. Terakhir, leader mengumpulkan hasil dari semua workers.

Penggunaan

  • Sintaksis:

    Di PolarDB, gunakan pernyataan EXPLAIN FORMAT=TREE untuk melihat operasi hash join dalam execution plan.

  • Contoh:

    Contoh berikut membuat dua tables dan memasukkan data sampel:

    CREATE TABLE t1 (c1 INT, c2 INT);
    CREATE TABLE t2 (c1 INT, c2 INT);
    
    INSERT t1(c1, c2) 
    WITH RECURSIVE seq AS (
      SELECT 1 AS a, 1 AS b
      UNION ALL
      SELECT a + 1, b + 1 FROM seq WHERE a < 1000
    )
    SELECT a,b FROM seq;
    
    INSERT INTO t2 SELECT * FROM t1;

    Lihat execution plan untuk pernyataan SQL berikut:

    EXPLAIN FORMAT=TREE SELECT * FROM t1 JOIN t2 ON t1.c1 = t2.c2;
    EXPLAIN FORMAT=TREE
    EXPLAIN
    | -> Gather (slice: 1; workers: 2)  (cost=33.38 rows=4)
        -> Inner hash join (t2.c1 = t1.c1)  (cost=23.08 rows=2)
            -> Repartition (hash keys: t2.c1; slice: 2; workers: 1)  (cost=11.35 rows=2)
                -> Parallel table scan on t2, with parallel partitions: 1  (cost=0.65 rows=4)
            -> Hash
                -> Repartition (hash keys: t1.c1; slice: 3; workers: 1)  (cost=11.35 rows=2)
                    -> Parallel table scan on t1, with parallel partitions: 1  (cost=0.65 rows=4)