Bagaimanakah Pernyataan Pertanyaan SQL dilaksanakan
Hello semua! Ini adalah artikel pertama saya.
Dalam artikel ini, saya akan memperkenalkan bagaimana pernyataan pertanyaan sql dilaksanakan
Di bawah ialah gambar rajah seni bina MySQL:
Secara amnya, MySQl boleh dibahagikan kepada dua bahagian: pelayan dan lapisan enjin storan.
Lapisan pelayan termasuk penyambung, cache pertanyaan, penghurai, pengoptimum, pelaksana, dsb., dan mengandungi kebanyakan fungsi perkhidmatan teras MySQL, serta semua fungsi binaan (seperti tarikh, masa, matematik dan penyulitan fungsi). Semua ciri enjin storan silang, seperti prosedur tersimpan, pencetus dan paparan dilaksanakan pada lapisan ini.
Lapisan enjin storan bertanggungjawab untuk penyimpanan dan pengambilan data. Seni binanya berasaskan pemalam, menyokong berbilang enjin storan seperti InnoDB, MyISAM, Memory. Dengan menggunakan MySQL 5.5.5, InnoDB menjadi enjin storan lalai untuk MySQL.
Anda boleh menentukan enjin memori wneh mencipta jadual dengan menggunakan kenyataan create table dengan engine=memory.
Enjin storan yang berbeza berkongsi lapisan Pelayan yang sama
Penyambung
Langkah pertama ialah menyambung pangkalan data, yang memerlukan penyambung. Penyambung bertanggungjawab untuk mewujudkan sambungan dengan pelanggan, mendapatkan kebenaran dan menyelenggara dan mengurus sambungan. Perintah sambungan ialah:
mysql -h$ip -P$port -u$user -p
Arahan ini digunakan untuk mewujudkan sambungan dengan pelayan. Selepas melengkapkan jabat tangan TCP klasik, penyambung akan menggunakan nama pengguna dan kata laluan pembekal untuk mengesahkan identiti anda.
- Jika nama pengguna atau kata laluan salah, anda akan menerima Akses ditolak kerana ralat pengguna dan program klien akan ditamatkan.
- Jika pengesahan berjaya, penyambung akan mendapatkan semula kebenaran akaun semasa daripada jadual kebenaran. Semua semakan kebenaran semasa sambungan ini bergantung pada perolehan awal ini.
Ini bermakna apabila sambungan berjaya diwujudkan, sebarang perubahan yang dibuat oleh pentadbir kepada kebenaran pengguna tidak akan menjejaskan kebenaran sambungan sedia ada. Hanya sambungan baharu akan menggunakan tetapan kebenaran yang dikemas kini.
Selepas sambungan diwujudkan, jika tiada tindakan seterusnya, sambungan memasuki keadaan terbiar, yang boleh dilihat menggunakan arahan show processlist:
Jika pelanggan kekal tidak aktif terlalu lama, penyambung akan terputus secara automatik. Tempoh dikawal oleh parameter tunggu_masa tamat, yang lalai kepada 8 jam.
Jika sambungan ditamatkan dan pelanggan menghantar permintaan, ia akan menerima mesej ralat: Sambungan terputus ke pelayan MySQL semasa pertanyaan. Untuk meneruskan, anda perlu menyambung semula dan kemudian melaksanakan permintaan.
Dalam pangkalan data, sambungan berterusan merujuk kepada sambungan yang pelanggan mengekalkan sambungan yang sama untuk permintaan berterusan selepas berjaya menyambung. Sambungan pendek merujuk kepada memutuskan sambungan selepas beberapa pertanyaan dan menyambung semula untuk pertanyaan seterusnya.
Memandangkan proses sambungan adalah rumit, adalah disyorkan untuk meminimumkan penciptaan sambungan semasa pembangunan, iaitu, gunakan sambungan berterusan apabila boleh.
Walau bagaimanapun, apabila menggunakan sambungan berterusan, penggunaan memori MySQL mungkin meningkat dengan ketara kerana memori sementara yang digunakan semasa pelaksanaan diuruskan dalam objek sambungan. Sumber ini dikeluarkan hanya apabila sambungan ditamatkan. Jika sambungan berterusan terkumpul, ia boleh menyebabkan penggunaan memori yang berlebihan, menyebabkan sistem terpaksa menamatkan MySQL (OOM) secara paksa, mengakibatkan permulaan semula yang tidak dijangka.
Penyelesaian:
- Putuskan sambungan berterusan secara berkala. Selepas menggunakan sambungan untuk seketika atau melaksanakan pertanyaan yang menggunakan memori yang berlebihan, putuskan sambungan dan sambung semula untuk pertanyaan berikutnya.
- Jika anda menggunakan MySQL 5.7 atau lebih baru, anda boleh menggunakan mysql_reset_connection selepas melaksanakan operasi intensif sumber untuk memulakan semula sumber sambungan. Proses ini tidak memerlukan penyambungan semula atau pengesahan semula tetapi menetapkan semula sambungan kepada keadaannya yang baru dibuat.
Cache Pertanyaan
Nota: Bermula dari MySQL 8.0, ciri cache pertanyaan telah dialih keluar sepenuhnya kerana kelemahannya mengatasi kelebihannya.
Apabila MySQL menerima permintaan pertanyaan, ia mula-mula menyemak cache pertanyaan untuk melihat sama ada pertanyaan ini telah dilaksanakan sebelum ini. Pertanyaan yang telah dilaksanakan sebelum ini dan keputusannya dicache dalam memori sebagai pasangan nilai kunci. Kuncinya ialah pernyataan pertanyaan, dan nilainya ialah hasilnya. Jika kunci ditemui dalam cache pertanyaan, nilai dikembalikan terus kepada klien.
Jika pertanyaan tidak ditemui dalam cache pertanyaan, proses diteruskan.
Mengapa cache pertanyaan lebih mendatangkan kemudaratan daripada kebaikan?
Penolakan cache pertanyaan berlaku sangat kerap. Sebarang kemas kini pada jadual akan mengosongkan semua cache pertanyaan yang berkaitan dengan jadual itu, menghasilkan kadar hit cache yang sangat rendah, melainkan jadual itu ialah jadual konfigurasi statik.
MySQL menyediakan kaedah "atas permintaan" untuk menggunakan cache pertanyaan. Dengan menetapkan parameter query_cache_type kepada DEMAND, pernyataan SQL tidak akan menggunakan cache pertanyaan secara lalai. Untuk menggunakan cache pertanyaan, anda boleh menentukan secara eksplisit SQL_CACHE:
mysql -h$ip -P$port -u$user -p
Penghurai
Jika cache pertanyaan tidak dipukul, proses pelaksanaan pernyataan bermula. MySQL terlebih dahulu perlu memahami perkara yang perlu dilakukan, jadi ia menghuraikan pernyataan SQL.
Penghurai terlebih dahulu melakukan analisis leksikal. Pernyataan SQL input, yang terdiri daripada rentetan dan ruang, dianalisis oleh MySQL untuk mengenal pasti perkara yang diwakili oleh setiap bahagian. Contohnya, pilih dikenal pasti sebagai pernyataan pertanyaan, T sebagai nama jadual dan ID sebagai lajur.
Selepas analisis leksikal, analisis sintaks dilakukan. Berdasarkan hasil analisis leksikal, penganalisis sintaks menentukan sama ada pernyataan SQL mematuhi peraturan sintaks MySQL.
Jika terdapat ralat sintaks, mesej ralat seperti Anda mempunyai ralat dalam sintaks SQL anda akan dipaparkan. Sebagai contoh, dalam pertanyaan berikut, kata kunci pilihan tersilap ejaan:
select SQL_CACHE * from T where ID=10;
Pengoptimum
Selepas menghuraikan, MySQL tahu apa yang anda mahu lakukan. Seterusnya, pengoptimum menentukan cara melakukannya.
Pengoptimum menentukan indeks yang hendak digunakan apabila jadual mempunyai berbilang indeks atau susunan jadual bercantum apabila pertanyaan melibatkan berbilang jadual. Contohnya, dalam pertanyaan berikut:
mysql> elect * from t where ID=1; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from t where ID=1' at line 1
Pertanyaan boleh bermula dengan mendapatkan semula nilai daripada t1 atau t2. Kedua-dua pendekatan menghasilkan keputusan logik yang sama, tetapi prestasi mereka mungkin berbeza. Peranan pengoptimum ialah memilih pelan yang paling cekap.
Selepas fasa pengoptimuman, proses diteruskan ke pelaksana.
Pelaksana
Pelaksana mula melaksanakan pertanyaan.
Sebelum pelaksanaan, ia terlebih dahulu menyemak sama ada sambungan semasa mempunyai kebenaran untuk menanyakan jadual. Jika tidak, ralat yang menunjukkan kebenaran tidak mencukupi dikembalikan. (Semakan kebenaran juga dilakukan apabila mengembalikan hasil daripada cache pertanyaan.)
Jika kebenaran diberikan, jadual dibuka dan pelaksanaan diteruskan. Semasa proses ini, pelaksana berinteraksi dengan enjin storan berdasarkan definisi enjin jadual.
Sebagai contoh, katakan jadual T tidak mempunyai indeks pada lajur ID. Proses pelaksanaan pelaksana adalah seperti berikut:
- Panggil antara muka enjin InnoDB untuk mengambil baris pertama jadual dan semak sama ada nilai ID ialah 10. Jika tidak, langkaunya; jika ya, tambahkannya pada set hasil.
- Panggil antara muka enjin untuk mengambil "baris seterusnya", mengulangi logik yang sama sehingga semua baris ditandakan.
- Pelaksana mengembalikan set keputusan terkumpul kepada pelanggan.
Pada ketika ini, pertanyaan telah selesai.
Untuk jadual yang diindeks, prosesnya melibatkan penggunaan kaedah pra-takrif enjin untuk mengambil "baris padanan pertama" dan "baris padanan seterusnya" secara berulang.
Dalam log pertanyaan perlahan, medan rows_examined menunjukkan bilangan baris yang diimbas semasa pelaksanaan pertanyaan. Nilai ini terkumpul setiap kali pelaksana memanggil enjin untuk mendapatkan semula baris data.
Dalam sesetengah kes, satu panggilan kepada pelaksana mungkin melibatkan pengimbasan berbilang baris secara dalaman dalam enjin. Oleh itu, bilangan baris yang diimbas oleh enjin tidak semestinya sama baris_diperiksa.
tamat
Terima kasih kerana membaca!Saya harap artikel itu dapat membantu anda.
Atas ialah kandungan terperinci Bagaimanakah Pernyataan Pertanyaan SQL dilaksanakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

InnoDB menggunakan redolog dan undologs untuk memastikan konsistensi dan kebolehpercayaan data. 1. Pengubahsuaian halaman data rekod untuk memastikan pemulihan kemalangan dan kegigihan transaksi. 2.UNDOLOGS merekodkan nilai data asal dan menyokong penggantian transaksi dan MVCC.

MySQL adalah sistem pengurusan pangkalan data relasi sumber terbuka, terutamanya digunakan untuk menyimpan dan mengambil data dengan cepat dan boleh dipercayai. Prinsip kerjanya termasuk permintaan pelanggan, resolusi pertanyaan, pelaksanaan pertanyaan dan hasil pulangan. Contoh penggunaan termasuk membuat jadual, memasukkan dan menanyakan data, dan ciri -ciri canggih seperti Operasi Join. Kesalahan umum melibatkan sintaks SQL, jenis data, dan keizinan, dan cadangan pengoptimuman termasuk penggunaan indeks, pertanyaan yang dioptimumkan, dan pembahagian jadual.

Kedudukan MySQL dalam pangkalan data dan pengaturcaraan sangat penting. Ia adalah sistem pengurusan pangkalan data sumber terbuka yang digunakan secara meluas dalam pelbagai senario aplikasi. 1) MySQL menyediakan fungsi penyimpanan data, organisasi dan pengambilan data yang cekap, sistem sokongan web, mudah alih dan perusahaan. 2) Ia menggunakan seni bina pelanggan-pelayan, menyokong pelbagai enjin penyimpanan dan pengoptimuman indeks. 3) Penggunaan asas termasuk membuat jadual dan memasukkan data, dan penggunaan lanjutan melibatkan pelbagai meja dan pertanyaan kompleks. 4) Soalan -soalan yang sering ditanya seperti kesilapan sintaks SQL dan isu -isu prestasi boleh disahpepijat melalui arahan jelas dan log pertanyaan perlahan. 5) Kaedah pengoptimuman prestasi termasuk penggunaan indeks rasional, pertanyaan yang dioptimumkan dan penggunaan cache. Amalan terbaik termasuk menggunakan urus niaga dan preparedStatemen

MySQL dipilih untuk prestasi, kebolehpercayaan, kemudahan penggunaan, dan sokongan komuniti. 1.MYSQL Menyediakan fungsi penyimpanan dan pengambilan data yang cekap, menyokong pelbagai jenis data dan operasi pertanyaan lanjutan. 2. Mengamalkan seni bina pelanggan-pelayan dan enjin penyimpanan berganda untuk menyokong urus niaga dan pengoptimuman pertanyaan. 3. Mudah digunakan, menyokong pelbagai sistem operasi dan bahasa pengaturcaraan. 4. Mempunyai sokongan komuniti yang kuat dan menyediakan sumber dan penyelesaian yang kaya.

Berbanding dengan bahasa pengaturcaraan lain, MySQL digunakan terutamanya untuk menyimpan dan mengurus data, manakala bahasa lain seperti Python, Java, dan C digunakan untuk pemprosesan logik dan pembangunan aplikasi. MySQL terkenal dengan prestasi tinggi, skalabilitas dan sokongan silang platform, sesuai untuk keperluan pengurusan data, sementara bahasa lain mempunyai kelebihan dalam bidang masing-masing seperti analisis data, aplikasi perusahaan, dan pengaturcaraan sistem.

MySQL sesuai untuk perusahaan kecil dan besar. 1) Perniagaan kecil boleh menggunakan MySQL untuk pengurusan data asas, seperti menyimpan maklumat pelanggan. 2) Perusahaan besar boleh menggunakan MySQL untuk memproses data besar dan logik perniagaan yang kompleks untuk mengoptimumkan prestasi pertanyaan dan pemprosesan transaksi.

Cardinality Indeks MySQL mempunyai kesan yang signifikan terhadap prestasi pertanyaan: 1. Indeks kardinaliti yang tinggi dapat lebih berkesan menyempitkan julat data dan meningkatkan kecekapan pertanyaan; 2. Indeks kardinaliti yang rendah boleh membawa kepada pengimbasan jadual penuh dan mengurangkan prestasi pertanyaan; 3. Dalam indeks bersama, urutan kardinaliti yang tinggi harus diletakkan di depan untuk mengoptimumkan pertanyaan.
