<p class="toc-wraper ui card column author-box grid pt-2" style="display:none"><em class="icon remove text-mute "></em>
</p>
<h2>
<span class="header-link octicon octicon-link"></span>Terangkan Apakah kegunaan </h2>
<p>Apabila <code>Explain</code> digunakan bersama dengan pernyataan <code>SQL</code>, <code>MySQL</code> akan memaparkan maklumat daripada pengoptimum tentang pelaksanaan SQL . Iaitu, <code>MySQL</code> menerangkan cara ia akan memproses pernyataan, termasuk cara untuk menyertai jadual dan dalam susunan untuk menyertai jadual, dsb. </p>
<ul>
<li>Memuatkan susunan jadual </li>
<li>
<code>sql</code> Jenis pertanyaan </li>
<li> Indeks yang manakah boleh digunakan dan indeks yang benar-benar digunakan </li>
<li> Rujukan jadual hubungan dengan jadual</li>
<li>Berapa banyak baris dalam jadual yang disoal oleh pengoptimum<br>…..</li>
</ul>
<h2>
<span class="header-link octicon octicon-link"></span>Apakah maklumat yang Jelaskan</h2>
<p><code>Explain</code>Pelan pelaksanaan mengandungi maklumat medan berikut: <code>id</code>, <code>select_type</code>, <code>table</code>, <code>partitions</code>, <code>type</code>, <code>possible_keys</code>, <code>key</code>, <code>key_len</code>, <code>ref</code>, <code>rows</code>, <code>filtered</code>, <code>Extra</code> 12 medan. </p>
<h2>
<span class="header-link octicon octicon-link"></span>Terangkan penerangan terperinci tentang rancangan pelaksanaan</h2>
<h3>
<span class="header-link octicon octicon-link"></span>1. dilaksanakan dalam pertanyaan Dalam susunan jadual, lebih besar nilai </h3>
<p>, lebih tinggi keutamaan dan <code>id:</code> akan dilaksanakan terlebih dahulu. <strong>Akan ada kira-kira tiga situasi: <code>id</code></strong><code>id</code></p>1 <h5>Sama <span class="header-link octicon octicon-link"></span>Memandangkan <code>id</code> daripada ketiga-tiga rekod itu adalah sama. boleh difahami bahawa ketiga-tiga ini Setiap jadual adalah kumpulan dengan keutamaan yang sama, dan susunan pelaksanaan adalah dari atas ke bawah Susunan khusus ditentukan oleh pengoptimum. </h5>
<p><code>id</code></p>2 <h5> adalah berbeza <span class="header-link octicon octicon-link"></span>Jika terdapat subkueri dalam <code>id</code> kami, maka nombor jujukan </h5> akan meningkat, semakin besar nilai <p> Lebih tinggi keutamaan, lebih awal ia dilaksanakan. Apabila ketiga-tiga jadual itu bersarang dalam urutan, didapati subkueri paling dalam <code>SQL</code> adalah yang terbesar dan dilaksanakan terlebih dahulu. <code>id</code><code>id</code><code>id</code></p>3. Kedua-dua jenis di atas wujud pada masa yang sama <h5>
<span class="header-link octicon octicon-link"> Ubah suai </span> sedikit, tambahkan subquery, dan dapatkan dua jenis di atas. </h5> wujud pada masa yang sama. <p> yang sama dibahagikan kepada satu kumpulan, jadi terdapat tiga kumpulan yang berada dalam kumpulan yang sama dilaksanakan secara berurutan dari atas ke bawah Semakin besar nilai <code>SQL</code> dalam kumpulan yang berbeza, semakin tinggi keutamaannya dilaksanakan. <code>id</code><code>id</code><code>id</code></p> 2. select_type<h3>
<span class="header-link octicon octicon-link"></span>: Menunjukkan jenis pertanyaan </h3>, terutamanya digunakan untuk membezakan pelbagai pertanyaan kompleks, seperti: <p>, <code>select_type</code>, <code>select</code>, dsb. <code>普通查询</code><code>联合查询</code><code>子查询</code></p>1 MUDAH<h5>
<span class="header-link octicon octicon-link"></span>: mewakili pernyataan pertanyaan pilih yang paling mudah, iaitu pertanyaan tidak mengandungi subkueri atau </h5>set persilangan dan perbezaan Tunggu. untuk operasi. <p><code>SIMPLE</code><code>union</code></p>2. PRIMER<h5>
<span class="header-link octicon octicon-link"></span>: Apabila pernyataan pertanyaan mengandungi mana-mana subbahagian kompleks, pertanyaan paling luar ditandakan sebagai </h5>. <p><code>PRIMARY</code><code>PRIMARY</code></p>3. SUBQUERY<h5>
<span class="header-link octicon octicon-link"></span>: Apabila senarai </h5> atau <p> mengandungi subquery, subquery ditandakan sebagai: <code>SUBQUERY</code> . <code>select</code><code>where</code><code>SUBQUERY</code></p>4 DERIVED<h5>
<span class="header-link octicon octicon-link"></span>: Mewakili pilihan subkueri yang terkandung dalam klausa </h5>, yang disertakan dalam senarai <p> kami Subquery akan ditandakan <code>DERIVED</code>. <code>from</code><code>from</code><code>derived</code></p>5. KESATUAN<h5>
<span class="header-link octicon octicon-link"></span>: Jika </h5> diikuti dengan pernyataan <p>, ia akan ditandakan sebagai <code>UNION</code>; > >Termasuk dalam subkueri klausa <code>union</code>, <code>select</code> luar akan ditandakan sebagai <code>union</code>. <code>union</code><code>from</code><code>select</code><code>derived</code>6. KEPUTUSAN KESATUAN</p>
<h5>
<span class="header-link octicon octicon-link">: mewakili data bacaan daripada jadual sementara </span> dan </h5> lajur <p> mewakili menggunakan Lakukan operasi <code>UNION RESULT</code> pada hasil <code>union</code> pertama dan keempat. <code>table</code><code><union1,4></code><code>select</code><code>union</code>3. Nama jadual yang ditanya mengikut jadual</p>
<h3> tidak semestinya jadual sebenar Terdapat alias untuk memaparkan alias, atau ia mungkin jadual sementara, seperti di atas <span class="header-link octicon octicon-link">, </span>, dsb. </h3>
<h3>
<span class="header-link octicon octicon-link"></span>4. Pembahagian</h3>
<p> Maklumat partition dipadankan semasa membuat pertanyaan jadual. Hit status partition. <code>NULL</code><code>partitions</code></p>
<h3>5. Jenis<span class="header-link octicon octicon-link"></span>
</h3>: Apakah jenis yang digunakan dalam pertanyaan? Ia adalah penunjuk yang sangat penting dalam pengoptimuman <p> Perintah yang paling teruk ialah: <code>type</code>><code>SQL</code>><code>system</code>><code>const</code>><code>eq_ref</code>><code>ref</code>><code>ref_or_null</code>><code>index_merge</code>><code>unique_subquery</code><code>index_subquery</code><code>range</code><code>index</code><code>ALL</code>1. Sistem</p>
<h5><span class="header-link octicon octicon-link">: Apabila jadual hanya mempunyai satu baris rekod (jadual sistem), jumlah data Disk IO selalunya tidak diperlukan dan sangat pantas. </span></h5>
<p><code>system</code>2 const</p>
<h5>
<span class="header-link octicon octicon-link">: menunjukkan bahawa pertanyaan menyentuh kunci utama </span> atau indeks unik </h5>, atau bahagian yang disambungkan ialah nilai malar (<p>). Pengimbasan jenis ini sangat cekap, mengembalikan sejumlah kecil data dan sangat pantas. <code>const</code><code>primary key</code><code>unique</code><code>const</code>3. eq_ref</p>
<h5>
<span class="header-link octicon octicon-link">: Jika kunci utama </span> atau </h5> indeks dipukul semasa pertanyaan, <p> ialah <code>eq_ref</code>. <code>primary key</code><code>unique key</code><code>type</code><code>eq_ref</code>4. ruj</p>
<h5>
<span class="header-link octicon octicon-link">: Berbeza daripada </span>, </h5> bermakna menggunakan indeks bukan unik, banyak baris yang layak akan ditemui. <p><code>ref</code><code>eq_ref</code><code>ref</code>5. ref_or_null</p>
<h5>
<span class="header-link octicon octicon-link">: Jenis sambungan ini serupa dengan ref, kecuali </span> tambahan akan mencari baris yang mengandungi nilai </h5>. <p><code>ref_or_null</code><code>MySQL</code><code>NULL</code>6. index_merge</p>
<h5><span class="header-link octicon octicon-link">: Kaedah pengoptimuman gabungan indeks digunakan dan pertanyaan menggunakan lebih daripada dua indeks. </span></h5>
<p><code>index_merge</code>7. unique_subquery</p>
<h5>
<span class="header-link octicon octicon-link">: Gantikan </span> subquery berikut, dan subquery mengembalikan set unik. </h5>
<p><code>unique_subquery</code><code>IN</code></p>8. index_subquery<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">value IN (SELECT primary_key FROM single_table WHERE some_expr)</pre><div class="contentsignin">Salin selepas log masuk</div></div>
<h5>
<span class="header-link octicon octicon-link">: Berbeza daripada </span>, ia digunakan untuk indeks bukan unik dan boleh mengembalikan nilai pendua. </h5>
<p><code>index_subquery</code><code>unique_subquery</code></p>9 julat<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">value IN (SELECT key_column FROM single_table WHERE some_expr)</pre><div class="contentsignin">Salin selepas log masuk</div></div>
<h5>
<span class="header-link octicon octicon-link">: Gunakan indeks untuk memilih baris dan dapatkan hanya baris dalam julat yang diberikan. Ringkasnya, ia adalah untuk mendapatkan semula data dalam julat tertentu untuk medan yang diindeks. Menggunakan </span>, </h5>, <p>, <code>range</code>, <code>where</code> dan syarat lain dalam pernyataan <code>bettween...and</code> untuk bertanya <code><</code> semuanya <code>></code>. <code><=</code><code>in</code><code>type</code><code>range</code>Hanya carian julat </p> untuk medan dengan set indeks ialah <h6>. <span class="header-link octicon octicon-link"></span><code>type</code><code>range</code>10. Indeks</h6>
<h5>
<span class="header-link octicon octicon-link">: </span> dan </h5> sebenarnya membaca keseluruhan jadual ialah <p> melintasi pokok indeks ke baca. , dan <code>index</code> dibaca dari cakera keras. <code>Index</code><code>ALL</code><code>index</code><code>ALL</code>11. SEMUA</p>
<h5><span class="header-link octicon octicon-link">: Seluruh jadual akan dilalui untuk mencari baris yang sepadan, dengan prestasi yang paling teruk. </span></h5>
<p><code>ALL</code> 6. possible_keys</p>
<h3>
<span class="header-link octicon octicon-link">: Menunjukkan indeks yang mana dalam </span> membolehkan kami mencari rekod yang dikehendaki dalam jadual Setelah pertanyaan melibatkan Jika ada indeks pada medan tertentu, indeks akan disenaraikan, </h3> tetapi indeks ini mungkin tidak semestinya indeks yang digunakan apabila akhirnya menanyakan data <p>. Sila rujuk contoh di atas untuk butiran. <code>possible_keys</code><code>MySQL</code><strong></strong> 7. kunci</p>
<h3>
<span class="header-link octicon octicon-link">: Berbeza daripada </span>, kunci ialah indeks yang sebenarnya digunakan dalam pertanyaan. Jika tiada indeks digunakan, ia akan menjadi dipaparkan sebagai </h3>. Sila rujuk contoh di atas untuk butiran. <p><code>key</code><code>possible_keys</code>Apabila <code>NULL</code> ialah </p>, berbilang indeks mungkin dipaparkan. <blockquote>
<p><code>type</code><code>index_merge</code></p>8 key_len</blockquote>
<h3><span class="header-link octicon octicon-link">: Menunjukkan panjang indeks (bilangan bait) yang digunakan dalam pertanyaan, semakin pendek panjangnya. lebih baik. </span></h3>
<p>Indeks satu lajur, maka keseluruhan panjang indeks perlu disertakan <code>key_len</code></p>Indeks berbilang lajur, tidak semua lajur boleh digunakan dan lajur sebenar yang digunakan dalam pertanyaan; perlu dikira. <ul>
<li>
<li>Nota: </li> hanya mengira panjang indeks yang digunakan dalam keadaan </ul> dan walaupun indeks digunakan untuk mengisih dan mengumpulkan, ia tidak akan dikira menjadi <blockquote> . <p></p>
</blockquote>
<h3>
<span class="header-link octicon octicon-link"></span>9. Ruj</h3>
<p><code>ref</code>: Yang biasa ialah: <code>const</code>, <code>func</code>, <code>null</code>, nama medan. </p>
<ul>
<li>Apabila menggunakan pertanyaan setara yang berterusan, <code>const</code> akan dipaparkan </li>
<li>Apabila pertanyaan berkaitan, <code>关联字段</code>
</li>
<li> jadual berkaitan yang sepadan akan dipaparkan jika. syarat pertanyaan Jika <code>表达式</code>, <code>函数</code> digunakan atau lajur keadaan mengalami penukaran tersirat dalaman, ia mungkin dipaparkan sebagai <code>func</code>
</li>
<li>Kes lain<code>null</code>
</li>
</ul>
<h3>
<span class="header-link octicon octicon-link"></span>10 baris</h3>
<p><code>rows</code>: Berdasarkan statistik jadual dan penggunaan indeks, anggarkan bilangan baris yang perlu dibaca untuk mencari rekod yang kami perlukan. </p>
<p>Ini ialah data penting untuk menilai prestasi <code>SQL</code> Bilangan baris yang <code>mysql</code> perlu diimbas secara intuitif boleh menunjukkan prestasi <code>SQL</code> Secara amnya, semakin kecil nilai <code>rows</code> Lebih baik. </p>
<h3>
<span class="header-link octicon octicon-link"></span>11 ditapis</h3>
<p><code>filtered</code>Ini ialah nilai peratusan, peratusan bilangan rekod dalam jadual yang memenuhi syarat. Ringkasnya, medan ini mewakili perkadaran baki rekod yang memenuhi syarat selepas menapis data yang dikembalikan oleh enjin storan. </p>
<p> Sebelum versi <code>MySQL.5.7</code>, jika anda ingin memaparkan <code>filtered</code>, anda perlu menggunakan perintah <code>explain extended</code>. Selepas <code>MySQL.5.7</code>, secara lalai <code>explain</code> akan memaparkan terus maklumat <code>partitions</code> dan <code>filtered</code>. </p>
<h3>
<span class="header-link octicon octicon-link"></span>12 Tambahan</h3>
<p><code>Extra</code>: Maklumat tidak sesuai untuk dipaparkan dalam lajur lain, banyak maklumat tambahan dalam <code>Explain</code> akan dipaparkan dalam <code>Extra</code> Medan dipaparkan. </p>
<h5>
<span class="header-link octicon octicon-link"></span>1. Menggunakan indeks</h5>
<p><code>Using index</code>: Kami menggunakan indeks penutup dalam operasi <code>select</code> yang sepadan index. , menggunakan pertanyaan indeks penutup akan menjadi sangat pantas, <code>SQl</code> keadaan yang sesuai untuk pengoptimuman. </p>
<p>Apakah itu indeks penutup?</p>
<p>A <code>SQL</code> hanya perlu dikembalikan melalui indeks. Data yang perlu kami buat pertanyaan (satu atau beberapa medan) tidak perlu melaluinya indeks sekunder , selepas mencari kunci utama, tanya seluruh baris data melalui kunci utama (<code>select *</code>). </p>
<p><strong>Nota</strong>: Jika kami ingin menggunakan indeks penutup, kami hanya mengeluarkan medan yang diperlukan apabila <code>select</code>, bukan <code>select *</code> dan medan itu diindeks. </p>
<h5>
<span class="header-link octicon octicon-link"></span>2 Menggunakan tempat</h5>
<p><code>Using where</code>: Tiada indeks tersedia ditemui semasa pertanyaan, dan data yang diperlukan boleh diperoleh melalui <code>where</code> penapisan keadaan, tetapi sila nota Ya, bukan semua pertanyaan dengan pernyataan <code>where</code> akan memaparkan <code>Using where</code>. </p>
<h5>
<span class="header-link octicon octicon-link"></span>3. Menggunakan sementara</h5>
<p><code>Using temporary</code>: Menunjukkan bahawa hasil pertanyaan perlu disimpan dalam jadual sementara, yang biasanya digunakan semasa mengisih atau mengumpulkan pertanyaan. </p>
<h5>
<span class="header-link octicon octicon-link"></span>4 Menggunakan failsort</h5>
<p><code>Using filesort</code>: Menunjukkan bahawa operasi pengisihan tidak boleh diselesaikan menggunakan indeks, iaitu medan <code>ORDER BY</code> tidak mempunyai indeks. Biasanya SQL sedemikian Ia perlu dioptimumkan. </p>
<p>Jika medan <code>ORDER BY</code> mempunyai indeks, indeks penutup akan digunakan, yang jauh lebih pantas daripada kelajuan pelaksanaan. </p>
<h5>
<span class="header-link octicon octicon-link"></span>5 Menggunakan penimbal gabungan</h5>
<p><code>Using join buffer</code>: Apabila kita menanyakan jadual bersama, jika syarat gabungan jadual tidak menggunakan indeks, kita memerlukan penimbal gabungan kawasan untuk menyimpan hasil perantaraan. </p>
<h5>
<span class="header-link octicon octicon-link"></span>6. Mustahil di mana</h5>
<p><code>Impossible where</code>: Ini bermakna kami menggunakan pernyataan <code>where</code> yang salah, menyebabkan tiada baris yang memenuhi syarat. </p>
<h5>
<span class="header-link octicon octicon-link"></span>7. Tiada jadual digunakan</h5>
<p><code>No tables used</code>: Tiada klausa <code>FROM</code> dalam pernyataan pertanyaan kami, atau terdapat klausa <code>FROM DUAL</code>. </p>
<p>Terdapat banyak maklumat dalam lajur <code>Extra</code>, jadi saya tidak akan menyenaraikan semuanya di sini Untuk butiran, lihat <code>MySQL</code> dokumen rasmi: https://dev.mysql.com/. doc/ref…</p> <p><img src="https://img.php.cn/upload/article/000/000/020/5cc4fdf22f28d8552a4eb8b088117835-0.png" alt=""></p>
<h2>
<span class="header-link octicon octicon-link"></span>Ringkasan</h2>
<p>Lajur utama untuk dilihat: </p>
<p>possible_keys: Nama indeks yang mungkin tersedia. Nama indeks di sini ialah nama panggilan indeks yang ditentukan semasa indeks dibuat jika indeks tidak mempunyai nama panggilan, nama lajur pertama dalam indeks dipaparkan secara lalai (dalam contoh ini, ia adalah "nama pertama"). Maksud nama indeks lalai selalunya tidak jelas. </p>
<p>kunci: Ia menunjukkan nama indeks yang sebenarnya digunakan oleh MySQL. Jika ia kosong (atau NULL), MySQL tidak menggunakan indeks. </p>
<p>key_len: Panjang bahagian indeks yang digunakan, dalam bait </p>
<p>ref: Senaraikan sama ada untuk menapis (mengikut kekunci) <br> melalui pemalar (const) atau medan jadual tertentu (jika ia adalah gabungan </p>
<p>baris: apa yang MySQL anggap Nombor itu daripada rekod ia mesti mengimbas sebelum mencari keputusan yang betul. Jelas sekali, nombor ideal di sini ialah 1. </p>
<p>Pembelajaran yang disyorkan: "<a href="https://www.php.cn/course/list/51.html" target="_blank">tutorial video mysql</a>" <br></p>
Atas ialah kandungan terperinci Apakah kegunaan MySQL Explain? (Dengan penjelasan pelaksanaan terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!