Praktik terbaik Amazon Redshift untuk mendesain kueri - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Praktik terbaik Amazon Redshift untuk mendesain kueri

Untuk memaksimalkan kinerja kueri, ikuti rekomendasi ini saat membuat kueri:

  • Desain tabel sesuai dengan praktik terbaik untuk memberikan dasar yang kuat untuk kinerja kueri. Untuk informasi selengkapnya, lihat Praktik terbaik Amazon Redshift untuk mendesain tabel.

  • Hindari menggunakanselect *. Sertakan hanya kolom yang Anda butuhkan secara khusus.

  • Gunakan a Ekspresi bersyarat CASE untuk melakukan agregasi kompleks alih-alih memilih dari tabel yang sama beberapa kali.

  • Jangan gunakan cross-joins kecuali benar-benar diperlukan. Ini bergabung tanpa kondisi gabungan menghasilkan produk Cartesian dari dua tabel. Cross-join biasanya dijalankan sebagai nested-loop join, yang merupakan jenis gabungan paling lambat.

  • Gunakan subkueri dalam kasus di mana satu tabel dalam kueri hanya digunakan untuk kondisi predikat dan subquery mengembalikan sejumlah kecil baris (kurang dari sekitar 200). Contoh berikut menggunakan subquery untuk menghindari bergabung dengan tabel LISTING.

    select sum(sales.qtysold) from sales where salesid in (select listid from listing where listtime > '2008-12-26');
  • Gunakan predikat untuk membatasi kumpulan data sebanyak mungkin.

  • Dalam predikat, gunakan operator paling murah yang Anda bisa. Kondisi perbandinganoperator lebih disukai daripada SUKA operator. Operator LIKE masih lebih disukai SIMILAR TO atauOperator POSIX.

  • Hindari menggunakan fungsi dalam predikat kueri. Menggunakannya dapat menaikkan biaya kueri dengan membutuhkan sejumlah besar baris untuk menyelesaikan langkah-langkah perantara kueri.

  • Jika memungkinkan, gunakan klausa WHERE untuk membatasi kumpulan data. Perencana kueri kemudian dapat menggunakan urutan baris untuk membantu menentukan catatan mana yang cocok dengan kriteria, sehingga dapat melewati pemindaian sejumlah besar blok disk. Tanpa ini, mesin eksekusi kueri harus memindai kolom yang berpartisipasi sepenuhnya.

  • Tambahkan predikat untuk memfilter tabel yang berpartisipasi dalam gabungan, bahkan jika predikat menerapkan filter yang sama. Kueri mengembalikan set hasil yang sama, tetapi Amazon Redshift dapat memfilter tabel gabungan sebelum langkah pemindaian dan kemudian dapat secara efisien melewati blok pemindaian dari tabel tersebut. Filter redundan tidak diperlukan jika Anda memfilter pada kolom yang digunakan dalam kondisi gabungan.

    Misalnya, misalkan Anda ingin bergabung SALES dan menemukan penjualan tiket LISTING untuk tiket yang terdaftar setelah Desember, dikelompokkan berdasarkan penjual. Kedua tabel diurutkan berdasarkan tanggal. Kueri berikut menggabungkan tabel pada kunci umum dan filter untuk listing.listtime nilai yang lebih besar dari 1 Desember.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' group by 1 order by 1;

    Klausa WHERE tidak menyertakan predikat untuksales.saletime, sehingga mesin eksekusi dipaksa untuk memindai seluruh SALES tabel. Jika Anda tahu filter akan menghasilkan lebih sedikit baris yang berpartisipasi dalam gabungan, tambahkan filter itu juga. Contoh berikut memotong waktu eksekusi secara signifikan.

    select listing.sellerid, sum(sales.qtysold) from sales, listing where sales.salesid = listing.listid and listing.listtime > '2008-12-01' and sales.saletime > '2008-12-01' group by 1 order by 1;
  • Gunakan tombol sortir dalam klausa GROUP BY sehingga perencana kueri dapat menggunakan agregasi yang lebih efisien. Kueri mungkin memenuhi syarat untuk agregasi satu fase ketika daftar GROUP BY hanya berisi kolom kunci pengurutan, salah satunya juga merupakan kunci distribusi. Kolom kunci sortir dalam daftar GROUP BY harus menyertakan kunci sortir pertama, lalu kunci pengurutan lain yang ingin Anda gunakan dalam urutan kunci pengurutan. Misalnya, valid untuk menggunakan kunci sortir pertama, kunci sortir pertama dan kedua, kunci pengurutan pertama, kedua, dan ketiga, dan seterusnya. Tidak valid untuk menggunakan kunci pengurutan pertama dan ketiga.

    Anda dapat mengonfirmasi penggunaan agregasi satu fase dengan menjalankan EXPLAIN perintah dan mencari XN GroupAggregate di langkah agregasi kueri.

  • Jika Anda menggunakan klausa GROUP BY dan ORDER BY, pastikan Anda meletakkan kolom dalam urutan yang sama di keduanya. Artinya, gunakan pendekatan hanya mengikuti.

    group by a, b, c order by a, b, c

    Jangan gunakan pendekatan berikut.

    group by b, c, a order by a, b, c