全部产品
Search
文档中心

AnalyticDB:Menyesuaikan urutan join secara manual

更新时间:Jun 26, 2025

Topik ini menjelaskan cara menyesuaikan urutan join secara manual setelah menggunakan hint untuk menonaktifkan fitur penyesuaian otomatis urutan join.

Ikhtisar

AnalyticDB for MySQL mendukung kueri yang berisi join kompleks dan menyediakan fitur penyesuaian otomatis urutan join. Namun, kondisi filter dari pernyataan kueri dan tabel dapat berubah sewaktu-waktu. Jika karakteristik data kompleks, fitur penyesuaian otomatis urutan join mungkin gagal memperkirakan karakteristik kueri dalam semua skenario atau memilih urutan join yang optimal. Urutan join yang tidak sesuai dapat menyebabkan masalah yang memengaruhi kinerja kueri, seperti ekspansi data dalam set hasil sementara dan penggunaan memori yang tinggi.

Untuk mengatasi masalah tersebut, AnalyticDB for MySQL memungkinkan Anda menggunakan hint /*+ reorder_joins*/ untuk menentukan apakah akan mengaktifkan fitur penyesuaian otomatis urutan join.

  • /*+ reorder_joins=true*/: Mengaktifkan fitur penyesuaian otomatis urutan join. Setelah diaktifkan, sistem secara otomatis menyesuaikan urutan join. Secara default, fitur ini diaktifkan di AnalyticDB for MySQL. Saat menjalankan kueri SQL, urutan join disesuaikan secara otomatis tanpa perlu menggunakan hint.

  • /*+ reorder_joins=false*/: Menonaktifkan fitur penyesuaian otomatis urutan join. Setelah dinonaktifkan, Anda dapat menyesuaikan urutan join secara manual berdasarkan karakteristik data dari kueri. Ini memungkinkan Anda menjalankan kueri berdasarkan urutan join dalam pernyataan SQL yang ditulis.

Catatan

/*+ reorder_joins*/ adalah hint tingkat sesi yang hanya berlaku pada pernyataan SQL tempat hint tersebut diterapkan.

Metode penyesuaian

  • Sebelum Penyesuaian

    • Pernyataan Kueri

      Contoh berikut menunjukkan pernyataan Query 10 asli.

      Catatan
      • Contoh ini menjelaskan cara menyesuaikan urutan join secara manual dan menunjukkan efek kueri. Dalam contoh ini, Query 10 dalam benchmark TPC-H digunakan. Untuk informasi tentang benchmark TPC-H, lihat TPC-H Versi 2 dan Versi 3.

      • Secara default, fitur penyesuaian otomatis urutan join diaktifkan di AnalyticDB for MySQL. Saat pernyataan kueri berikut dijalankan, hint /*+ reorder_joins=false*/ digunakan untuk mensimulasikan skenario di mana urutan join tidak sesuai.

      SELECT   c_custkey,
               c_name,
               Sum(l_extendedprice * (1 - l_discount)) AS revenue,
               c_acctbal,
               n_name,
               c_address,
               c_phone,
               c_comment
      FROM     customer c,
               orders o,
               lineitem l,
               nation n
      WHERE    c_custkey = o_custkey
      AND      l_orderkey = o_orderkey
      AND      o_orderdate >= date '1993-10-01'
      AND      o_orderdate <  date '1993-10-01' + INTERVAL '3' month
      AND      l_returnflag = 'R'
      AND      c_nationkey = n_nationkey
      GROUP BY c_custkey,
               c_name,
               c_acctbal,
               c_phone,
               n_name,
               c_address,
               c_comment
      ORDER BY revenue DESC
      LIMIT    20;
    • Urutan Join

      Tabel digabungkan dalam urutan berikut berdasarkan pernyataan SQL di atas:

      customer JOIN orders JOIN lineitem JOIN nation;
    • Hasil Kueri

      Hasil sementara berikut dari setiap join dalam rencana eksekusi dikembalikan.

      Catatan

      Untuk informasi tentang cara menanyakan rencana eksekusi, lihat Gunakan Rencana Eksekusi untuk Menganalisis Kueri.

      1. Setelah tabel customer dan orders digabungkan, 57.069 baris dikembalikan dalam set hasil sementara tmp1.1

      2. Setelah set hasil sementara tmp1 dan tabel lineitem digabungkan, 114.705 baris dikembalikan dalam set hasil sementara tmp2.2

      3. Setelah set hasil sementara tmp2 dan tabel nation digabungkan, 114.705 baris dikembalikan sebagai hasil akhir.3

      Jumlah total baris yang dikembalikan dari ketiga join dihitung dengan menggunakan rumus berikut: 57.069 + 114.705 + 114.705 = 286.479.

  • Setelah Penyesuaian

    • Pernyataan Kueri

      Tambahkan hint /*+ reorder_joins=false*/ ke pernyataan SQL untuk menonaktifkan fitur penyesuaian otomatis urutan join AnalyticDB for MySQL, dan sesuaikan urutan join secara manual. Contoh berikut menunjukkan pernyataan SQL yang telah disesuaikan:

      /*reorder_joins=false*/
      SELECT   c_custkey,
               c_name,
               Sum(l_extendedprice * (1 - l_discount)) AS revenue,
               c_acctbal,
               n_name,
               c_address,
               c_phone,
               c_comment
      FROM     customer c,
               orders o,
               nation n,
               lineitem l
      WHERE    c_custkey = o_custkey
      AND      c_nationkey = n_nationkey
      AND      l_orderkey = o_orderkey
      AND      o_orderdate >= date '1993-10-01'
      AND      o_orderdate <  date '1993-10-01' + INTERVAL '3' month
      AND      l_returnflag = 'R'
      GROUP BY c_custkey,
               c_name,
               c_acctbal,
               c_phone,
               n_name,
               c_address,
               c_comment
      ORDER BY revenue DESC
      LIMIT    20;
    • Urutan Join

      Tabel digabungkan dalam urutan berikut berdasarkan pernyataan SQL di atas:

      customer JOIN orders JOIN nation JOIN lineitem
    • Hasil Kueri

      Hasil sementara berikut dari setiap join dalam rencana eksekusi dikembalikan.

      Catatan

      Untuk informasi tentang cara menanyakan rencana eksekusi, lihat Gunakan Rencana Eksekusi untuk Menganalisis Kueri.

      1. Setelah tabel customer dan orders digabungkan, 57.069 baris dikembalikan dalam set hasil sementara tmp1.1

      2. Setelah set hasil sementara tmp1 dan tabel nation digabungkan, 57.069 baris dikembalikan dalam set hasil sementara tmp2.2

      3. Setelah set hasil sementara tmp2 dan tabel lineitem digabungkan, 114.705 baris dikembalikan sebagai hasil akhir.3

      Jumlah total baris yang dikembalikan dari ketiga join dihitung dengan menggunakan rumus berikut: 57.069 + 57.069 + 114.705 = 228.843.

      Jumlah total baris yang dikembalikan setelah penyesuaian berkurang sebesar 20%. Perbandingan di atas menunjukkan bahwa urutan join yang berbeda memengaruhi ukuran set hasil sementara antara. Jika urutan join di AnalyticDB for MySQL tidak sesuai, Anda dapat menyesuaikan urutan join secara manual untuk meningkatkan kinerja kueri.