Rumah >pangkalan data >tutorial mysql >Analisis mendalam tentang proses pelaksanaan pernyataan pertanyaan MySQL
Artikel ini membawa anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan proses pelaksanaan pernyataan pertanyaan Mengambil MYSQL sebagai contoh, ia mendedahkan proses pertanyaan pangkalan data MySQL dan membolehkan semua orang untuk saya mempunyai sedikit pemahaman. beberapa bahagian dalam pangkalan data, saya harap ia akan membantu semua orang.
Pembelajaran yang disyorkan: tutorial video mysql
Perlu mendapatkan semula data tertentu yang memenuhi keperluan daripada pangkalan data, kita boleh menulis dengan mudah Pilih A B C FROM T WHERE ID = XX SQL sedemikian, kemudian apabila kami menghantar permintaan sedemikian kepada pangkalan data, apakah sebenarnya yang dilakukan oleh pangkalan data?
Hari ini kami mengambil MYSQL sebagai contoh untuk mendedahkan proses pertanyaan pangkalan data MySQL dan membolehkan semua orang memahami beberapa bahagian dalam pangkalan data.
MySQL boleh dibahagikan terutamanya kepada lapisan Pelayan dan lapisan enjin storan.
Lapisan pelayan termasuk penyambung, cache pertanyaan, penganalisis, pengoptimum, pelaksana, dll. Semua fungsi enjin storan silang dilaksanakan dalam lapisan ini, seperti prosedur tersimpan dan pencetus , paparan, fungsi, dsb., terdapat juga modul log binlog modul log umum;
Lapisan enjin storan bertanggungjawab untuk penyimpanan dan pengambilan data. Model seni binanya adalah pemalam dan menyokong berbilang enjin storan seperti InnoDB, MyISAM dan Memory. Enjin storan yang paling biasa digunakan sekarang ialah InnoDB (yang menyokong transaksi), yang telah menjadi enjin storan lalai sejak MySQL versi 5.5.5.
Penyambung bertanggungjawab terutamanya untuk log masuk pengguna ke pangkalan data dan melaksanakan pengesahan identiti pengguna, termasuk mengesahkan kata laluan akaun, kebenaran dan operasi lain.
Jika kata laluan pengguna tidak betul, anda akan menerima ralat "Akses ditolak untuk pengguna", dan kemudian program klien menamatkan pelaksanaan.
Jika kata laluan akaun pengguna telah diluluskan, penyambung akan menanyakan semua kebenaran pengguna dalam jadual kebenaran Pertimbangan logik kebenaran berikutnya dalam sambungan ini akan bergantung pada data kebenaran yang dibaca pada masa ini untuk mengatakan, selagi sambungan tidak diputuskan, walaupun pentadbir mengubah suai kebenaran pengguna, pengguna tidak akan terjejas.
Selepas klien membuat sambungan dengan pelayan, MySQL akan menanyakan cache terlebih dahulu apabila melaksanakan pernyataan pertanyaan untuk mengesahkan sama ada SQL ini telah dilaksanakan sebelum Pass. Penyataan yang dilaksanakan sebelum ini dan keputusannya akan dicache terus dalam ingatan dalam bentuk pasangan nilai kunci. Kuncinya ialah pernyataan pertanyaan, dan nilainya ialah hasil pertanyaan. Jika pertanyaan anda boleh mencari kunci terus dalam cache ini, maka nilai akan dikembalikan terus kepada klien. Jika tiada pukulan, operasi seterusnya perlu dilakukan, dan keputusan akan dicache selepas selesai untuk memudahkan panggilan seterusnya.
Apabila anda melihat ini, mata anda akan bersinar dan anda akan mempunyai keinginan untuk menggunakan fungsi ini dengan baik.
Malah, tidak disyorkan untuk menggunakan cache pertanyaan di sini Cache pertanyaan gagal dengan kerap Selagi terdapat kemas kini pada jadual, semua cache pertanyaan pada jadual ini akan dikosongkan. Jadi ada kemungkinan anda mengambil masalah untuk menyimpan keputusan, hanya untuk memadamkannya dengan kemas kini sebelum anda menggunakannya. Untuk pangkalan data dengan tekanan kemas kini yang berat, kadar hit bagi cache pertanyaan akan menjadi sangat rendah. Melainkan ia adalah jenis jadual yang tidak akan dikemas kini untuk masa yang lama, seperti jadual konfigurasi sistem, tetapi bukankah kita patut meletakkan konfigurasi sistem seperti ini pada platform konfigurasi?
Fungsi cache pertanyaan telah dipadamkan dalam MYSQL8.0 Pegawai juga percaya bahawa fungsi ini mempunyai beberapa senario aplikasi praktikal, jadi mereka hanya memadamkannya.
Mysql tidak memukul cache pertanyaan, maka ia akan memasuki penganalisis terutamanya digunakan untuk menganalisis pernyataan SQL. Penganalisis terbahagi terutamanya kepada dua langkah berikut:
Analisis leksikal : Penyataan SQL terdiri daripada berbilang rentetan Pertama, kata kunci, seperti pilih, mestilah diekstrak dan dicadangkan pertanyaan jadual, cadangkan nama medan, cadangkan syarat pertanyaan, dsb.
Analisis tatabahasa: Berdasarkan hasil analisis leksikal, analisis tatabahasa adalah untuk menentukan sama ada pernyataan SQL yang anda masukkan adalah betul dan mematuhi sintaks MYSQL pernyataan anda tidak betul , anda akan menerima peringatan ralat "Anda mempunyai ralat dalam sintaks SQL anda".
Program analisis leksikal menguraikan keseluruhan pernyataan pertanyaan kepada pelbagai jenis bendera dan analisis sintaks menukarkan "pelbagai jenis bendera" kepada gabungan bermakna untuk MySQL berdasarkan bahasa sistem yang ditentukan . Akhir sekali, sistem menjana pepohon sintaks (AST), iaitu struktur data yang bergantung kepada pengoptimum.
Selepas lulus penganalisis, MySQL akan tahu apa yang anda mahu lakukan. Sebelum pelaksanaan bermula, ia mesti diproses oleh pengoptimum.
Mengapa anda memerlukan pengoptimum?
Pengoptimum mengandungi banyak teknik pengoptimuman kompleks yang selalunya lebih canggih daripada pengaturcara terbaik. Pengoptimuman automatik sistem adalah setara dengan menjadikan teknologi pengoptimuman ini tersedia untuk semua orang.
Pengoptimum boleh memperoleh banyak maklumat statistik daripada kamus data, seperti bilangan baris dalam jadual, taburan setiap lajur dalam jadual, dsb. Pengoptimum Pengoptimum boleh mempertimbangkan beratus-ratus rancangan pelaksanaan yang berbeza, manakala pengaturcara secara amnya hanya boleh mempertimbangkan bilangan kemungkinan yang terhad
boleh memilih pelan pelaksanaan yang berkesan berdasarkan maklumat ini , dan adalah sukar untuk program pengguna untuk mendapatkan maklumat ini; rancangan pelaksanaan.
MySQL tahu perkara yang anda mahu lakukan melalui penganalisis dan cara melakukannya melalui pengoptimum, jadi ia memasuki peringkat pelaksana dan mula melaksanakan penyataan.
7. Analisis penyata
Kami menggunakan pernyataan pertanyaan SQL sebenar berikut untuk menganalisis proses pelaksanaan pertanyaan MYSQL
Pertama daripada semua, pelanggan Pelanggan perlu menyambung ke pangkalan data Jika kata laluan akaun tidak betul, mesej ralat akan dikembalikan secara terus Jika betul, pergi ke langkah seterusnya.select id,name,sex,phoone from user t where t.age='26' and t.account='javadaily'
Sebelum MYSQL8.0, ia akan pergi ke cache pertanyaan dahulu dan menggunakan pernyataan SQL ini sebagai kunci untuk bertanya sama ada terdapat hasil dalam ingatan tentukan sama ada ia mempunyai kebenaran dan sama ada ia mempunyai kebenaran Kemudian kembali kepada klien, jika tidak ralat akan dilaporkan; > Lakukan analisis leksikal melalui penganalisis dan ekstrak elemen utama pernyataan sql Contohnya, penyataan di atas diekstrak Pilih pertanyaan, ekstrak nama jadual untuk disoal
, lajur untuk disoal ialah. Kemudian tentukan sama ada pernyataan SQL mempunyai ralat sintaks, seperti sama ada kata kunci itu betul, dsb. Jika tiada masalah, teruskan ke langkah seterusnya.
SQL di atas mempunyai dua rancangan pelaksanaan Pengoptimum memilih pelan A dengan kecekapan pelaksanaan tertinggi mengikut algoritma pengoptimumannya sendiri (maklumat statistik yang tidak tepat boleh menyebabkan pengoptimum memilih pelan pelaksanaan yang salah. ), mula melaksanakan pelan pengoptimuman selepas menentukannya. user
a. Mula-mula tanya pengguna id,name,sex,phoone
dan kemudian tentukan sama ada age=26
sama dengan 26 b Mula-mula cari pengguna account=javadailly
dan kemudian tanya pengguna
Lakukan pengesahan kebenaran Jika terdapat kebenaran pertanyaan, hubungi antara muka enjin pangkalan data untuk mengembalikan hasil pelaksanaan jika tidak, ralat akan dilaporkan. account=javadaily
age
age=26
Pembelajaran yang disyorkan: account=javadaily
tutorial video mysql
Atas ialah kandungan terperinci Analisis mendalam tentang proses pelaksanaan pernyataan pertanyaan MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!