Ketika pengguna mengirimkan kueri—yang biasanya ditulis sebagai pernyataan bahasa kueri terstruktur (SQL)—basis data akan mengevaluasi berbagai cara untuk mengambil data yang diminta. Proses pengambilan keputusan ini ditangani oleh komponen yang dikenal sebagai pengoptimal kueri, yang memilih strategi eksekusi yang paling efisien.
Sistem manajemen basis data modern (DBMS) menggunakan pengoptimal berbasis biaya yang memperkirakan biaya dari berbagai strategi eksekusi sebelum memilih opsi yang paling efisien. Karena proses ini, dua kueri basis data yang memberikan hasil yang identik dapat memiliki waktu eksekusi yang sangat berbeda—sering kali diukur dalam milidetik—yang berdampak pada kinerja kueri dan waktu respons.
Tetap terinformasi tentang tren industri yang paling penting—dan menarik—tentang AI, otomatisasi, data, dan di luarnya dengan buletin Think. Lihat Pernyataan Privasi IBM®.
Pengoptimalan kueri, atau pengoptimalan SQL Query, mempengaruhi jauh lebih dari kinerja kueri individu. Hal ini menentukan efisiensi seluruh sistem data, model machine learning, dan inisiatif AI dengan meningkatkan skala sistem dan penggunaan sumber daya.
Aplikasi bergantung pada basis data untuk mengambil informasi dengan cepat dan konsisten. Ketika kueri tidak efisien, basis data dapat menghabiskan waktu yang tidak perlu untuk melakukan pemindaian tabel, menyortir catatan, atau menggabungkan kumpulan data besar. Penundaan ini dapat memperlambat antarmuka pemrograman aplikasi (API) dan beban kerja analitik, sehingga menciptakan kemacetan yang menurunkan pengalaman pengguna secara keseluruhan.
Ketika organisasi mengumpulkan lebih banyak data, basis data harus mendukung beban kerja yang semakin kompleks yang didorong oleh volume yang besar, jenis data yang beragam, dan pola kueri yang lebih menuntut.
Dengan datasphere global yang diperkirakan akan mencapai 393,9 zettabyte pada tahun 2028, kueri yang dulunya memproses ribuan baris pada akhirnya dapat memproses jutaan atau miliaran. Pengoptimalan kueri meningkatkan skalabilitas dengan memungkinkan kueri yang efisien, bahkan ketika jumlah data dan kompleksitas beban kerja meningkat.
Rencana eksekusi yang efisien juga mengurangi sumber daya yang dibutuhkan untuk memproses kueri. Setiap operasi basis data memerlukan sumber daya sistem untuk memproses data, termasuk siklus unit pemrosesan pusat (CPU) dan input/output (I/O) disk.
Kueri yang tidak dioptimalkan dengan baik menghabiskan banyak sumber daya, membutuhkan pemrosesan yang jauh lebih banyak daripada yang diperlukan untuk menghasilkan hasil yang sama. Peningkatan konsumsi sumber daya ini dapat menimbulkan biaya yang besar di lingkungan cloud di mana penggunaan sumber daya secara langsung memengaruhi harga.
Platform data modern yang mendukung machine learning, analitik real-time, generasi dengan dukungan pengambilan data (RAG) dan AI bergantung pada akses yang cepat dan andal ke volume data yang besar. Pengoptimalan kueri membantu memastikan sistem-sistem ini dapat mengambil informasi yang relevan dengan cukup cepat untuk mendukung pengambilan keputusan real-time tanpa mengorbankan anggaran.
Pengoptimal basis data dapat menggunakan beberapa pendekatan ketika mengevaluasi strategi eksekusi potensial. Sistem basis data pada masa awal sering kali menggunakan pengoptimalan berbasis aturan, yang menerapkan aturan yang telah ditetapkan sebelumnya untuk menentukan rencana eksekusi berdasarkan struktur kueri.
DBMS modern biasanya memprioritaskan pengoptimalan berbasis biaya, yang mengevaluasi beberapa kemungkinan strategi eksekusi dan memperkirakan sumber daya yang dibutuhkan untuk masing-masing strategi. Beberapa sistem juga menggabungkan teknik berbasis heuristik, yang menerapkan pedoman praktis untuk menyederhanakan perencanaan kueri dan mengurangi biaya pengoptimalan.
Terlepas dari pendekatan pengoptimalan yang digunakan, beberapa konsep teknis membentuk bagaimana pengoptimal mengevaluasi strategi eksekusi potensial, termasuk:
Pengoptimal kueri adalah komponen basis data yang bertanggung jawab untuk memilih rencana eksekusi yang efisien, sering kali menggunakan teknik pengoptimalan berbasis biaya. Pada basis data relasional, proses ini membantu mesin basis data menentukan cara yang paling efisien untuk mengeksekusi kueri SQL.
Alih-alih bergantung pada aturan tetap, pengoptimal berbasis biaya menganalisis karakteristik data dan struktur kueri untuk menentukan pendekatan yang paling efisien. Fleksibilitas ini memungkinkan basis data untuk menyesuaikan strategi eksekusi seiring berkembangnya kumpulan data dan beban kerja.
Pengoptimal sangat bergantung pada statistik basis data untuk memperkirakan seberapa mahal rencana eksekusi yang berbeda nantinya. Statistik menggambarkan karakteristik utama dari data yang disimpan, termasuk:
Statistik ini memungkinkan pengoptimal untuk memperkirakan berapa banyak baris yang akan dikembalikan oleh suatu kueri dan seberapa besar beban kerja yang dibutuhkan oleh strategi eksekusi yang berbeda. Jika statistik menjadi usang atau tidak akurat, pengoptimal dapat memilih rencana eksekusi yang tidak efisien.
Estimasi kardinalitas mengacu pada prediksi jumlah baris yang akan dihasilkan dari setiap langkah dalam sebuah kueri. Misalnya, jika sebuah kueri menyaring baris menggunakan klausa WHERE seperti:
Wilayah LOKASI = 'Amerika Utara'
pengoptimal harus memperkirakan berapa banyak catatan yang cocok dengan filter tersebut.
Perkiraan ini mempengaruhi beberapa keputusan penting. Pengoptimal dapat menggunakannya untuk menentukan urutan tabel mana yang harus digabungkan, urutan gabungan yang paling efisien, algoritma penggabungan mana yang akan digunakan atau apakah pemindaian indeks harus digunakan alih-alih memindai tabel lengkap.
Indeks memungkinkan basis data untuk menemukan data tertentu lebih efisien daripada memindai seluruh tabel. Pengoptimal menggunakan indeks untuk mengurangi jumlah pekerjaan yang diperlukan untuk pengambilan data.
Jalur akses umum termasuk pemindaian tabel lengkap, yang membaca setiap baris dalam tabel; pemindaian indeks, yang membaca baris melalui struktur indeks; pencarian indeks, yang mengambil baris tertentu menggunakan pencarian indeks; dan pemindaian indeks saja, yang mengambil data langsung dari indeks tanpa mengakses tabel yang mendasarinya.
Memilih jalur akses yang benar dapat secara signifikan mengurangi jumlah pekerjaan yang diperlukan untuk menjalankan kueri, terutama saat bekerja dengan tabel besar.
Banyak kueri mengambil data dari beberapa tabel. Ketika hal ini terjadi, pengoptimal harus menentukan bagaimana tabel-tabel tersebut harus digabungkan. Algoritma penggabungan umum meliputi:
Pengoptimal memilih di antara algoritma ini berdasarkan faktor-faktor seperti ukuran data, indeks yang tersedia, dan perkiraan jumlah baris.
Untuk memahami cara kerja pengoptimalan kueri, akan sangat membantu jika kita memandang SQL sebagai bahasa deklaratif: bahasa ini menjelaskan data apa yang harus diambil, bukan bagaimana data tersebut harus diambil.
Pengoptimal bertugas menentukan bagaimana melaksanakan permintaan, dan dengan cara yang paling efisien. Untuk mencapai hal ini, sebagian besar basis data mengikuti beberapa langkah pengoptimalan:
Ketika kueri dikirimkan, basis data pertama mengurai pernyataan SQL dan memvalidasi sintaksnya. Selama tahap ini, sistem mengonfirmasi bahwa tabel, kolom, dan indeks yang direferensikan ada dan bahwa struktur kueri valid.
Ini juga memverifikasi bahwa objek yang relevan dalam skema basis data tersedia. Langkah ini memastikan bahwa basis data memahami permintaan sebelum mencoba mengoptimalkan atau menjalankannya.
Setelah parsing, basis data dapat menulis ulang kueri ke dalam bentuk setara yang dapat dieksekusi lebih efisien. Transformasi ini mempertahankan hasil kueri sambil meningkatkan struktur eksekusi. Teknik penulisan ulang kueri yang umum meliputi:
Transformasi ini memungkinkan pengoptimal untuk Jelajahi lebih lanjut strategi eksekusi yang lebih efisien tanpa mengubah hasil akhir. Mereka juga dapat membantu membatasi pemrosesan data yang tidak perlu.
Setelah kueri ditulis ulang, pengoptimal menghasilkan beberapa rencana eksekusi potensial. Setiap rencana mewakili strategi yang berbeda untuk mengambil data yang diminta.
Rencana mungkin berbeda berdasarkan indeks mana yang digunakan, urutan penggabungan tabel atau bagaimana hasil perantara diproses. Bahkan kueri yang relatif sederhana dapat menghasilkan beberapa strategi eksekusi yang mungkin.
Misalnya, satu kueri yang mengambil pesanan dari minggu lalu memiliki beberapa opsi: mungkin memindai tabel pesanan dan memfilter baris sesudahnya, menggunakan indeks pada tanggal pesanan untuk menemukan catatan terbaru dengan cepat atau mempersempit kumpulan data terlebih dahulu sebelum bergabung dengan pelanggan terkait atau tabel produk.
Pengoptimal selanjutnya mengevaluasi setiap rencana kandidat menggunakan model biaya. Model biaya memperkirakan berapa banyak pekerjaan yang perlu dilakukan basis data untuk melaksanakan rencana tertentu. Perkiraan ini biasanya mempertimbangkan faktor-faktor seperti:
Karena basis data tidak dapat mengetahui biaya pastinya sebelumnya, ia bergantung pada informasi statistik yang disimpan tentang data. Informasi tersebut membantu pengoptimal memperkirakan kemungkinan waktu pemrosesan dan menentukan algoritma dan struktur data pendukung mana yang paling tepat.
Setelah mengevaluasi rencana kandidat, pengoptimal memilih rencana dengan perkiraan biaya terendah. Strategi yang dipilih ini menjadi rencana eksekusi kueri, yang menjelaskan urutan operasi yang dilakukan basis data saat menjalankan kueri.
Rencana eksekusi yang efisien biasanya mencakup operasi seperti pemindaian tabel, penggabungan, penyortiran dan agregasi (misalnya, menggunakan GROUP BY atau LEFT JOIN). Pengguna dapat meninjau rencana EXPLAIN untuk melihat langkah-langkah yang diambil pengoptimal untuk mengambil data yang diminta.
Terlepas dari kecanggihan pengoptimal basis data modern, beberapa faktor dapat membuat pengoptimalan kueri menjadi sulit.
Meskipun pengoptimalan kueri terjadi secara otomatis, pengembang, administrator, dan insinyur data dapat meningkatkan kinerja melalui beberapa teknik pengoptimalan.
Indeks dapat secara signifikan meningkatkan kinerja kueri ketika mereka mendukung filter atau kondisi gabungan yang sering digunakan. Indeks yang dirancang dengan baik memungkinkan pengoptimal mengambil baris tertentu dengan cepat tanpa memindai seluruh tabel. Namun, pengindeksan yang berlebihan dapat menimbulkan overhead selama pembaruan data. Oleh karena itu indeks harus dirancang dengan hati-hati untuk menyeimbangkan kinerja baca dan efisiensi penulisan.
Karena pengoptimal menggunakan statistik untuk memperkirakan biaya kueri, menjaga statistik terkini sangat penting untuk mempertahankan rencana eksekusi yang efisien. Memperbarui statistik secara teratur memastikan bahwa pengoptimal memiliki informasi yang akurat tentang distribusi data dan ukuran tabel.
Menerapkan filter sebelumnya dalam eksekusi kueri mengurangi jumlah baris yang harus diproses nanti dalam kueri. Hasil perantara yang lebih kecil dapat membantu mempercepat eksekusi kueri. Untuk alasan ini, kueri yang menerapkan filter selektif lebih awal sering bekerja lebih efisien.
Kueri yang menggabungkan banyak tabel dapat menghasilkan kueri yang kompleks dan rencana eksekusi yang sama kompleksnya. Ketika gabungan tidak perlu atau berlebihan, menghapusnya dapat secara signifikan mengurangi kompleksitas eksekusi. Dalam beberapa kasus, denormalisasi juga dapat meningkatkan kinerja dengan mengurangi kebutuhan untuk bergabung, meskipun dapat meningkatkan penggunaan penyimpanan dan redundansi data.
Kueri yang mengambil kolom yang tidak perlu akan meningkatkan jumlah data yang harus dibaca dan diproses. Membatasi set hasil hanya ke bidang yang diperlukan mengurangi penggunaan memori dan operasi I/O disk. Penyesuaian kecil ini secara nyata dapat meningkatkan kinerja dalam kumpulan data besar.
Di beberapa lingkungan, partisi dapat membantu membagi tabel yang sangat besar menjadi segmen yang lebih mudah dikelola, sementara caching dapat mengurangi pekerjaan basis data berulang untuk hasil yang sering diakses. Pendekatan ini bukan perbaikan universal, tetapi mereka dapat melengkapi strategi pengoptimalan lainnya.
Banyak platform basis data juga menyediakan alat bawaan yang membantu pengembang dan administrator menganalisis kinerja kueri dan mengidentifikasi rencana eksekusi yang tidak efisien.
Misalnya, SQL Server Management Studio (SSMS) dapat membantu memantau kinerja kueri dan mengidentifikasi hambatan; MySQL Workbench menyediakan alat untuk menganalisis rencana kueri dan mengoptimalkan eksekusi; dan Oracle SQL Tuning Advisor dapat menghasilkan rekomendasi otomatis untuk meningkatkan SQL Query.
Pengoptimalan kueri dan penyetelan kueri sangat berkaitan tetapi mewakili proses yang berbeda.
Pengoptimalan kueri mengacu pada basis data proses otomatis yang digunakan untuk menentukan strategi eksekusi yang efisien.
Sebaliknya, penyetelan kueri mengacu pada upaya manual untuk meningkatkan kinerja kueri. Upaya ini mungkin termasuk menulis ulang kueri yang tidak efisien, membuat indeks baru, memperbarui statistik atau menyesuaikan pengaturan konfigurasi basis data.
Dalam praktiknya, pengoptimalan kueri dan penyetelan kueri sering bekerja bersama-sama untuk meningkatkan kinerja basis data. Bersama-sama, mereka membentuk seperangkat strategi pengoptimalan praktis untuk meningkatkan kinerja SQL dalam sistem produksi.
Pengoptimalan kueri berkembang melampaui perencanaan berbasis biaya tradisional. Sistem basis data modern sekarang menggabungkan otomatisasi, eksekusi adaptif, dan kecerdasan buatan untuk meningkatkan cara kueri dianalisis dan dieksekusi.
Salah satu arah yang muncul adalah pengembangan kemampuan basis data otonom, di mana sistem terus memantau kinerja dan merespons masalah secara otomatis. Alih-alih bergantung sepenuhnya pada pemecahan masalah reaktif, sistem ini menganalisis perilaku beban kerja, kinerja kueri, dan sinyal sistem untuk mengidentifikasi potensi masalah kinerja secara dini dan merekomendasikan tindakan korektif.
Banyak arsitektur basis data otonom mengatur kemampuan ini menjadi tiga area operasional, sering didukung oleh agen AI.
Kemampuan agentik ini dirancang untuk beroperasi dalam model human-in-the-loop, di mana otomatisasi menangani tugas-tugas operasional yang terdefinisi dengan baik sementara tim basis data mempertahankan pengawasan terhadap sistem yang penting.
Ketika organisasi terus menskalakan platform data dan mengadopsi aplikasi berbasis AI, sistem yang dapat memantau, mengoptimalkan, dan memelihara diri mereka sendiri akan memainkan peran yang semakin penting dalam memastikan kinerja basis data yang andal.
watsonx.data memungkinkan Anda untuk menskalakan analitik dan AI dengan semua data Anda, di mana pun data berada, melalui penyimpanan data yang terbuka, hybrid, dan diatur.
Jalankan aplikasi, analitik, dan AI generatif Anda dengan basis data di cloud mana pun.
Skalakan AI dengan sukses dengan menyiapkan strategi, data, keamanan, dan tata kelola yang tepat.