Jika anda ingin mempelajari MySQL secara mendalam, anda harus bermula dari seni bina makro Dalam artikel ini, kita akan mempelajari proses melaksanakan pernyataan pertanyaan MySQL. Saya harap ia akan membantu semua orang.
Versi MySQL artikel ini ialah 8.0.18
Peranan parser adalah untuk melaksanakan kerja berikut pada pernyataan SQL yang dihantar daripada klien:
Penghuraikan terutamanya memeriksa aspek tatabahasa dan leksikal, tetapi jika aspek tatabahasa dan leksikal adalah betul, tetapi jadual, medan tidak wujud, maka pernyataan SQL ini tidak dapat dilaksanakan dengan betul.
Jadi peranan prapemproses ialah: Penghuraian semantik untuk menentukan sama ada semantik pepohon parse adalah betul dan sama ada jadual dan medan wujud Selepas prapemprosesan, pepohon parse baharu akan diperolehi .
Struktur pengoptimum pertanyaan
Kaedah pelaksanaan pernyataan SQL dalam MySQL adalah seperti berikut Walaupun keputusan yang sama akan diperoleh pada akhirnya, terdapat perbezaan dalam kos Kaedah pelaksanaan khusus yang dipilih ditentukan oleh pengoptimum pertanyaan. Contohnya:
pengoptimum pertanyaan ialah pengoptimum berasaskan kos Prinsip kerjanya adalah untuk menilai pelbagai rancangan pelaksanaan berdasarkan pepohon parse , akhirnya akan mendapat pelan pelaksanaan dengan kos minimum sebagai penyelesaian akhir .
Walau bagaimanapun, kaedah pelaksanaan dengan overhed terkecil ini tidak semestinya kaedah pelaksanaan yang optimum Contohnya, indeks harus digunakan, tetapi imbasan jadual penuh dilakukan. Walaupun terdapat dua perkataan "pengoptimuman" dalam pengoptimum pertanyaan, pengoptimuman ini tidak mahakuasa Dalam banyak kes, adalah lebih perlu untuk mempertimbangkan sama ada pernyataan SQL ditulis dengan munasabah.
Pengoptimuman pertanyaan logik bertanggungjawab terutamanya untuk melaksanakan beberapa algebra hubungan untuk mengoptimumkan pernyataan SQL, dengan itu menjadikan pelaksanaan pernyataan SQL lebih cekap
Kita boleh menggunakan beberapa kes untuk memahami sahaja pengoptimuman pertanyaan logik
Penggabungan Subkueri
Sebelum bergabung
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=1) OR EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=2) );
Selepas bergabung
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND (t2.b2=1 OR t2.b2=2) );
Gabungkan berbilang subkueri dengan menggabungkan syarat pertanyaan dan kurangkan berbilang operasi sambungan kepada satu imbasan jadual dan satu sambungan
Penulisan semula predikat yang setara
Seperti biasa seperti pertanyaan kabur, % ditulis selepas syarat sebelum pertanyaan julat indeks dilakukan Sebenarnya, ini adalah kredit pengoptimum pertanyaan
Anggapkan bahawa syarat yang digunakan semuanya diindeks Sebelum menulis semula
SELECT * FROM USERINFO WHERE name LIKE 'Abc%';
Selepas menulis semula
SELECT * FROM USERINFO WHERE name >= 'Abc' AND name < 'Abd';
Inilah jawapan mengapa pertanyaan julat indeks boleh dilakukan
Pemudahan bersyarat
Pemudahan bersyarat juga menggunakan beberapa persamaan dan perhubungan algebra untuk mencapai pemudahan
((a AND b) AND (c AND d))
dipermudahkan kepada a AND b AND c AND d
col1 = col2 AND col2 = 3
dipermudahkan kepada col1 = 3 AND col2 = 3
col1 = 1+2
dipermudahkan kepada col1 = 3
Kerja utama pengoptimuman pertanyaan fizikal adalah berdasarkan Penyata SQL menilai kos berbilang pelan pelaksanaan masing-masing
Pengoptimuman pertanyaan fizikal terutamanya menyelesaikan masalah berikut:
Kaedah manakah yang mempunyai kos terendah dalam imbasan jadual tunggal (indeks imbasan + belakang jadual atau imbasan jadual penuh)
Apabila terdapat sambungan meja, kaedah sambungan manakah yang paling murah untuk digunakan?
Mari kita fahami secara ringkas kos penilaian. Penilaian kos adalah berdasarkan dua dimensi kos CPU dan kos IO
扫描方式 | 代价评估公式 |
---|---|
顺序扫描 | N_page * a_page_IO_time + N_tuple * a_tuple_CPU_time |
索引扫描 | C_index + N_page_index * a_page_IO_time |
Parameter di atas diterangkan seperti berikut:
Untuk maklumat tentang pengiraan kos indeks, sila rujuk artikel ini: Mengapa pertanyaan MySQL memilih untuk menggunakan indeks ini? ——Berdasarkan pengiraan kos indeks MySQL 8.0.22
Pelan pelaksanaan ialah produk pengoptimum pertanyaan dan akhirnya akan diserahkan kepada enjin storan untuk dilaksanakan. Pelan pelaksanaan boleh membantu kami mengetahui cara MySQL akan melaksanakan pernyataan SQL ini.
Gunakan kata kunci explain
untuk melihat pelan pelaksanaan pernyataan SQL Anda boleh mendapatkan maklumat berikut:
Peraturan pelayan MySQL Ia menentukan cara data disimpan, cara mengekstraknya dan cara mengemas kininya Spesifikasi ini dilaksanakan oleh enjin storan yang berbeza mempunyai kaedah pelaksanaan yang berbeza, jadi enjin storan yang berbeza akan memaparkannya fungsi dan ciri unik. Enjin storan yang paling biasa digunakan ialah InnoDB dan MyISAM
Mari kita bincangkan secara ringkas tentang ciri-ciri kedua-dua enjin storan ini
InnoDB:
MyISAM
Enjin storan tidak akan dibincangkan buat masa ini, dan akan terus diselangi dengan perbandingannya dalam artikel lain, serta butiran. Analisis proses mengemas kini data dalam InnoDB
Dulu, saya hanya tahu menulis pernyataan SQL pada perisian klien, klik untuk melaksanakan dan dapatkan data
Kini saya akhirnya faham bahawa pernyataan pertanyaan perlu melalui siri operasi ini selepas ia dihantar ke pelayan MySQL
tutorial video mysql
]Atas ialah kandungan terperinci MySQL belajar bercakap tentang proses pelaksanaan pernyataan pertanyaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!