Ketika sebuah query dikirimkan ke DB, itu diurai dan diterjemahkan ke aljabar relasional. Ini diverifikasi untuk validitas dan kebenarannya. Setelah melewati tahap ini, berbagai cara untuk mengevaluasi kueri dibuat. Ini diperiksa untuk berbagai faktor dan rencana pelaksanaannya dibuat. Ini mungkin didasarkan pada biaya kueri atau berdasarkan aturan kesetaraan. Setelah eksekusi berbasis biaya dan rencana eksekusi berbasis aturan dibuat, pengoptimal harus memutuskan, rencana mana yang akan dipilih untuk evaluasi (evaluation) . Ini adalah langkah terpenting dalam memproses kueri.
Oracle
The EXPLAIN PLAN menampilkan pernyataan yang dipilih oleh optimizer Oracle untuk SELECT, UPDATE, INSERT, dan DELETEpernyataan. Rencana eksekusi pernyataan adalah urutan operasi yang dilakukan Oracle untuk menjalankan pernyataan tersebut.
Pohon sumber baris adalah inti dari rencana eksekusi. Ini menunjukkan informasi berikut:
Urutan tabel yang direferensikan oleh pernyataan
Metode akses untuk setiap tabel yang disebutkan dalam pernyataan
Metode gabungan untuk tabel yang dipengaruhi oleh operasi gabungan dalam pernyataan
Operasi data seperti filter, pengurutan, atau agregasi
Selain pohon sumber baris, tabel rencana berisi informasi tentang berikut ini:
Optimasi, seperti biaya dan kardinalitas setiap operasi
Mempartisi, seperti kumpulan partisi yang diakses
Eksekusi paralel, seperti metode distribusi input gabungan
Hasil EXPLAIN PLAN membiarkan kita menentukan apakah yang ditunjuk oleh optimizer rencana eksekusi tertentu, seperti, loop bersarang bergabung. Ini juga membantu kita untuk memahami keputusan pengoptimal, seperti mengapa pengoptimal memilih gabungan loop bersarang dan bukan gabungan hash, dan memungkinkan kita memahami kinerja kueri.
The EXPLAIN PLAN merupakan Metode tidak memerlukan query dijalankan, sangat mengurangi waktu yang dibutuhkan untuk mendapatkan rencana eksekusi untuk berjalan lama query dibandingkan dengan AUTOTRACE.
Kemudian execution plan ditampilkan.
Untuk kueri paralel, gunakan skrip "utlxplp.sql" alih-alih "utlxpls.sql".
Dari Oracle 9i dan seterusnya, Anda harus menampilkan rencana eksekusi menggunakan paket DBMS_XPLAN
Jika beberapa orang mengakses tabel rencana yang sama, atau Anda ingin menyimpan riwayat rencana eksekusi, Anda harus menggunakan STATEMENT_ID. Ini mengaitkan ID yang ditentukan pengguna dengan setiap paket yang dapat digunakan saat mengambil data.
Referensi : oracle-base.com
MySQL
Kata EXPLAIN merupakan kunci digunakan di berbagai database SQL dan memberikan informasi tentang bagaimana database SQL Anda menjalankan kueri. Dalam MySQL, EXPLAIN dapat digunakan di depan query dimulai dengan SELECT, INSERT, DELETE, REPLACE, dan UPDATE. Untuk kueri sederhana, akan terlihat seperti berikut:
Alih-alih keluaran hasil biasa, MySQL kemudian akan menunjukkan rencana eksekusi pernyataannya dengan menjelaskan proses mana yang terjadi dalam urutan apa saat menjalankan pernyataan tersebut.
Catatan : Jika EXPLAIN tidak berhasil untuk digunakan pengguna database Anda mungkin tidak memiliki SELECT, hak istimewa untuk tabel atau tampilan yang digunakan dalam pernyataan
EXPLAIN untuk memperbaiki kueri yang lambat dengan cepat. Meskipun dapat membantu , ini tidak akan menghilangkan kebutuhan akan pemikiran struktural dan gambaran umum yang baik tentang model data yang ada. Seringkali, perbaikan paling sederhana dan saran tercepat adalah menambahkan indeks ke kolom tabel tertentu yang dipermasalahkan jika indeks digunakan dalam banyak kueri dengan masalah kinerja. Berhati-hatilah; jangan menggunakan terlalu banyak indeks karena mungkin akan kontra produktif. Membaca indeks dan tabel hanya masuk akal jika tabel memiliki jumlah baris yang signifikan dan Anda hanya memerlukan beberapa titik data. Jika Anda mengambil sekumpulan hasil yang sangat besar dari tabel dan sering menanyakan kolom yang berbeda, indeks pada setiap kolom tidak masuk akal dan menghalangi kinerja lebih dari itu membantu.
Explaining the original EXPLAIN
Sebelum terburu-buru untuk mengoptimalkan kueri, mari kita lihat lebih dekat keluaran dari perintah MENJELASKAN, untuk memastikan kita sepenuhnya memahami semua aspeknya. Hal pertama yang kami perhatikan, adalah dapat menyertakan lebih dari satu baris. Kueri yang kami analisis melibatkan dua tabel dalam proses, yang digabungkan menggunakan gabungan dalam. Masing-masing tabel ini direpresentasikan dalam baris berbeda dalam rencana eksekusi di atas. Sebagai analogi dunia pengkodean, Anda dapat melihat konsep gabungan dalam sangat mirip dengan loop bersarang. MySQL memilih tabel yang menurutnya paling baik untuk memulai perjalanan ("loop" luar) dan kemudian menyentuh tabel berikutnya menggunakan nilai-nilai dari "loop" luar.
Penjelasan lebih lanjut : MySQL Explain Example – Explaining MySQL EXPLAIN using StackOverflow data
Referensi : Understanding MySQL Queries With EXPLAIN
SQL Server
Execution Plan SQL Server adalah alat penting untuk membantu memahami detail mendalam tentang eksekusi kueri. Di SQL Server, ketika kueri dikirim dan dijalankan oleh mesin database, ia melakukan beberapa langkah seperti yang ditunjukkan di bawah ini. Rencana eksekusi adalah salah satu ukuran yang memberikan petunjuk langkah demi langkah tentang aliran eksekusi kueri dan ini dapat digunakan untuk mencari tahu di mana ada masalah.
Execution Plan SQL Server menentukan seberapa efisien kueri SQL nantinya. Execution Plan memberi kita perilaku kueri yang dieksekusi dan menunjukkan apakah indeks digunakan atau tidak saat kueri dijalankan. Rencana eksekusi memberikan informasi tentang indeks, gabungan, loop, dan lainnya. Itu juga dapat memberikan instruksi yang direkomendasikan untuk meningkatkan kinerja kueri.
SQL Server Query Execution
Proses eksekusi kueri menjalankan kueri sesuai langkah-langkah dalam rencana eksekusi SQL Server yang dihasilkan dalam proses pengoptimalan. Proses eksekusi kueri juga memvalidasi apakah rencana eksekusi valid atau tidak. Jika statistik berubah pada tabel yang merupakan bagian dari rencana eksekusi, maka proses eksekusi tidak akan mempertimbangkan rencana eksekusi tersebut dan pengoptimal akan menghasilkan rencana eksekusi baru. Untuk rencana eksekusi terbaik, disarankan untuk memperbarui statistik dan mengizinkan mesin database untuk menggunakan rencana eksekusi yang dibuat sebelumnya untuk kueri yang sama atau kumpulan pernyataan yang sama. Terkadang, kita dapat mengamati bahwa rencana eksekusi untuk beberapa kueri dibuat dalam waktu singkat dan untuk kueri lain membutuhkan waktu lebih lama. Setelah rencana eksekusi dibuat, itu disimpan dalam cache rencana yang merupakan bagian dari memori dan dengan menggunakan kembali rencana yang ada dapat mengurangi waktu eksekusi dan meningkatkan kinerja.
SHOWPLAN_TEXT
Opsi ini mirip dengan perkiraan rencana eksekusi grafis, karena ini memberi Anda teks rencana eksekusi dan memberi Anda informasi tentang apa rencana eksekusi itu. Itu tidak memberi Anda embel-embel apa pun yang biasanya terkait dengan rencana eksekusi.
SHOWPLAN_ALL
Opsi ini mirip dengan perkiraan rencana eksekusi grafis, tetapi memiliki beberapa fitur tambahan yang menyertainya termasuk jenis operator fisik dan jenis operator logika
SHOWPLAN_XML
Penjelasan lebih lanjut : SQL Server Query Execution Plans for beginners – Types and Options
Referensi : SQL Server Execution Plan Overview
PostgreSQL
EXPLAIN adalah pernyataan kembali rencana eksekusi yang dihasilkan untuk pernyataan yang diberikan. EXPLAIN ini menunjukkan bagaimana tabel yang terlibat dalam sebuah pernyataan akan dipindai oleh pemindaian indeks atau pemindaian sekuensial, dll., Dan jika beberapa tabel digunakan, jenis algoritme gabungan apa yang akan digunakan. Informasi paling penting dan berguna yang EXPLAIN dikembalikan pernyataan adalah biaya awal sebelum baris pertama dapat dikembalikan dan biaya total untuk mengembalikan kumpulan hasil lengkap.
Berikut ini adalah sintaks dari EXPLAIN pernyataan tersebut:
di mana optionbisa menjadi salah satu dari berikut ini:
ANALYZE [ boolean ]
VERBOSE [ boolean ]
COSTS [ boolean ]
BUFFERS [ boolean ]
TIMING [ boolean ]
SUMMARY [ boolean ]
FORMAT { TEXT | XML | JSON | YAML }
The booleanMenentukan apakah opsi yang dipilih harus diaktifkan atau dinonaktifkan. Anda dapat menggunakan TRUE, ON, atau 1untuk mengaktifkan pilihan, dan FALSE, OFF, atau 0untuk menonaktifkannya. Jika Anda menghilangkan boolean, defaultnya adalah ON.
Contoh
Di bagian ini, kami akan mendemonstrasikan pernyataan Explain PostgreSQL menggunakan contoh berdasarkan tabel penggajian :
Inilah kueri yang akan dianalisis:
Untuk melihat rencana kueri untuk kueri ini, gunakan yang berikut ini:
Outputnya akan terlihat seperti ini:
Menggunakan EXPLAINpernyataan itu mudah; memahami rencana kueri yang dikembalikan sedikit lebih menantang. Dalam contoh ini, kita melihat bahwa start up costis cost = 0.00 , the max timeis the 25.00 and the rowsis 400 .
Untuk menjalankan rencana dan memeriksanya, gunakan perintah berikut:
Hasilnya:
Dalam contoh ini, kami menggunakan EXPLAIN ANALYZE pernyataan. Pernyataan ini tidak hanya menawarkan taksiran untuk metrik ini, tetapi juga memberikan waktu proses kueri yang sebenarnya. Tiga item penting yang ditunjukkan di atas adalah biaya awal, waktu maksimum, dan jumlah baris yang dikembalikan.
Rencana eksekusi menceritakan start up cost adalah 0,024 , waktu maksimum adalah 0,027 , dan jumlah baris yang dikembalikan adalah 2 .
Penjelasan lebih lanjut : PostgreSQL EXPLAIN
Referensi : How to Use the PostgreSQL EXPLAIN Statement
Comments