Rumah  >  Artikel  >  pangkalan data  >  MySQL belajar bercakap tentang proses pelaksanaan pernyataan pertanyaan

MySQL belajar bercakap tentang proses pelaksanaan pernyataan pertanyaan

青灯夜游
青灯夜游ke hadapan
2023-01-11 20:38:551222semak imbas

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.

MySQL belajar bercakap tentang proses pelaksanaan pernyataan pertanyaan

Versi MySQL artikel ini ialah 8.0.18

Rajah Seni Bina

Parser

Peranan parser adalah untuk melaksanakan kerja berikut pada pernyataan SQL yang dihantar daripada klien:

  • Penghuraian Tatabahasa: Semak sintaks pernyataan SQL, sama ada kurungan dan tanda petikan ditutup, dsb.
  • Penghuraian leksikal: Pisahkan kata kunci, nama jadual dan nama medan dalam pernyataan SQL kepada nod, dan akhirnya memperoleh pokok penghuraian

Preprocessor

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 .

Pengoptimum pertanyaan

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:

  • Terdapat berbilang indeks untuk dipilih dalam jadual indeks yang manakah untuk dipilih?
  • Apabila kami melakukan pertanyaan berkaitan pada berbilang jadual, data jadual yang manakah digunakan? jadual penanda aras

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

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 &#39;Abc%&#39;;

    Selepas menulis semula

    SELECT * FROM USERINFO WHERE name >= &#39;Abc&#39; AND name < &#39;Abd&#39;;

    Inilah jawapan mengapa pertanyaan julat indeks boleh dilakukan

  • Pemudahan bersyarat

    Pemudahan bersyarat juga menggunakan beberapa persamaan dan perhubungan algebra untuk mencapai pemudahan

    • Alih keluar kurungan berlebihan dalam ungkapan dan kurangkan tahap pepohon AND dan OR yang dijana semasa analisis sintaks, seperti((a AND b) AND (c AND d)) dipermudahkan kepada a AND b AND c AND d
    • pemindahan berterusan, contohnya, col1 = col2 AND col2 = 3 dipermudahkan kepada col1 = 3 AND col2 = 3
    • pengiraan ungkapan, beberapa ungkapan yang boleh diselesaikan secara langsung akan ditukar kepada hasil pengiraan akhir , contohnya, col1 = 1+2 dipermudahkan kepada col1 = 3

Pengoptimuman pertanyaan fizikal

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:

  • a_page_IO_time, masa IO memuatkan halaman data
  • N_page, bilangan halaman data
  • N_tuple , bilangan tupel ( Satu tupel difahami sebagai satu baris data)
  • a_tuple_CPU_time, masa CPU yang dibelanjakan untuk menghurai tupel daripada halaman data
  • C_index, masa IO yang dibelanjakan pada indeks
  • N_page_index, halaman indeks Kuantiti

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

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:

  • id: Urutan pelaksanaan pertanyaan dalam pertanyaan bersarang.
  • possible_keys : Indeks yang boleh digunakan dalam pertanyaan ini
  • Kunci: Indeks sebenar digunakan
  • baris: Anggaran bilangan baris data yang perlu diambil untuk mendapatkan keputusan
  • jenis_pilih antara berbilang jadual Jenis sambungan
  • tambahan: maklumat tambahan, sama ada terdapat liputan indeks, tekan bawah indeks, dsb.

Enjin storan

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:

  • Menyokong kunci dan transaksi asing, memastikan Meningkatkan integriti dan ketekalan data
  • Menyokong butiran kunci yang lebih halus, kawalan kunci yang lebih baik dan kecekapan membaca dan menulis yang lebih tinggi

MyISAM

  • Adakah tidak menyokong transaksi, hanya menyokong kunci baris, sesuai untuk senario baca sahaja data

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

Ringkasan

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

  • Prapemproses akan menyemak semantik pernyataan SQL dan menyemak sama ada pernyataan SQL adalah samar-samar , medan, dll. wujud untuk membentuk pepohon parse baharu

  • Pengoptimum pertanyaan mendapat pelbagai pelan pelaksanaan yang dijana oleh pepohon parse ini dan memperolehnya selepas pengoptimuman pertanyaan logik dan pengoptimuman pertanyaan fizikal Pelan pelaksanaan dengan overhed minimum

  • Enjin pelaksanaan mendapat pelan pelaksanaan ini dan memanggil storan. antara muka enjin

  • Enjin storan memproses data mengikut Kueri pelan pelaksanaan, pertanyaan akan bertanya dan memanggil beberapa antara muka sistem fail dalam sistem pengendalian, melengkapkan pertanyaan data, dan akhirnya kembali kepada pelanggan

  • [Cadangan berkaitan:

    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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam