Rumah  >  Artikel  >  pangkalan data  >  Apakah rancangan pelaksanaan dalam mysql

Apakah rancangan pelaksanaan dalam mysql

青灯夜游
青灯夜游asal
2022-11-11 18:17:035530semak imbas

Dalam mysql, pelan pelaksanaan ialah satu set alatan yang disediakan oleh pangkalan data kepada pengguna untuk menghuraikan, menganalisis dan mengoptimumkan pernyataan SQL. Fungsi pelan pelaksanaan adalah: 1. Memaparkan susunan bacaan jadual; 3. Memaparkan indeks yang boleh digunakan; Hubungan rujukan antara mereka; 6. Paparkan bilangan baris pertanyaan dalam setiap jadual.

Apakah rancangan pelaksanaan dalam mysql

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Apabila menanyakan pangkalan data, kami biasanya menggunakan pernyataan sql untuk menanyakan data yang kami perlukan. Walau bagaimanapun, kami tidak tahu bagaimana SQL dilaksanakan dalam pangkalan data, sama ada ia menggunakan indeks, indeks mana yang digunakan, medan dan jadual mana yang dicari, susunannya, berapa lama masa yang diambil, dsb., jadi Adakah terdapat cara untuk melihat maklumat ini? MySQL menyediakan satu set alat - rancangan pelaksanaan.

1. Apakah rancangan pelaksanaan

Pelan pelaksanaan ialah satu set alat yang disediakan oleh pangkalan data untuk menghuraikan, menganalisis dan mengoptimumkan pernyataan SQL fungsi berikut Fungsi:

  • Paparkan susunan bacaan jadual; >

    Indeks yang manakah boleh digunakan;
  • Indeks yang manakah sebenarnya digunakan;
  • Hubungan rujukan antara jadual;
  • Bilangan baris yang ditanya untuk setiap jadual.
  • Nota: Pelan pelaksanaan hanyalah pelan rujukan pengoptimuman terbaik yang diberikan oleh pangkalan data untuk SQL, dan tidak semestinya penyelesaian yang optimum, iaitu,
  • Jangan percaya pelan pelaksanaan terlalu banyak
  • 2 Cara menggunakan pelan pelaksanaan

Menggunakan pelan pelaksanaan adalah sangat mudah, hanya tambahkan kata kunci yang menerangkan di hadapan SQL untuk dilaksanakan.

3. Maklumat pelan pelaksanaan

Seperti yang dapat dilihat daripada rajah, pelan pelaksanaan sql terutamanya mengandungi maklumat berikut: id, select_type ,jadual,partition,type,possible_keys,key,key_len,ref,rows,filtered,Extra.

3.1, idApakah rancangan pelaksanaan dalam mysql

pilih pertanyaan nombor siri Jika id adalah sama, susunan pelaksanaan adalah dari atas ke bawah jika id adalah berbeza, lebih besar nilai id akan diberi keutamaan Semakin tinggi tahap, lebih awal ia dilaksanakan;

select_type: Menunjukkan jenis pernyataan pilih, yang boleh mempunyai nilai berikut; . ; KESATUAN BERGANTUNG: dalam KESATUAN Pernyataan SELECT kedua atau seterusnya bergantung pada pertanyaan luaran; pertanyaan;

SUBQUERY : Pernyataan SELECT pertama dalam subquery; pertanyaan luaran; DIRI: PILIH (subkueri daripada klausa FROM).

  • 3.3, jadual

  • jadual: mewakili nama jadual pertanyaan, yang boleh berada dalam situasi berikut :

  • Memaparkan nama jadual jika alias diberikan, alias dipaparkan

  • : Menunjukkan bahawa pertanyaan. syarat ialah subkueri;

  • : Menunjukkan bahawa jadual 1 dan jadual 2 menggunakan kesatuan.

  • 3.4, partition
  • partition: partition yang sepadan.
  • 3.5, taip

jenis: Lajur ini mewakili jenis perkaitan jadual atau jenis akses, iaitu pangkalan data menentukan cara mencari item dalam jadual. Cari julat anggaran rekod baris data. Daripada yang optimum kepada yang paling teruk, ia adalah: sistem > const > jadual, yang agak Untuk jadual sistem, ini adalah lajur khas jenis const, yang biasanya tidak muncul dan boleh diabaikan; baris data, jadi ia sangat pantas dan sering digunakan Untuk pertanyaan tentang PRIMARY KEY atau indeks UNIK, boleh difahami bahawa const dioptimumkan

eq_ref: imbasan indeks unik, untuk setiap; kunci indeks, hanya terdapat satu rekod dalam jadual dengannya Padanan, kunci utama yang biasa digunakan atau imbasan indeks unik, ini mungkin jenis gabungan terbaik selain const; imbasan indeks unik, mengembalikan padanan nilai tunggal Semua baris lajur yang diindeks untuk =,

  • julat: Hanya dapatkan semula baris dalam julat tertentu dan gunakan indeks untuk memilih baris Ia biasanya digunakan untuk pertanyaan seperti antara, , dalam, dll. Pertanyaan julat ini ialah. lebih baik daripada indeks. Kerana ia hanya perlu mengimbas satu titik indeks dan berakhir pada satu titik yang lain; >

    semua: iaitu Imbasan jadual penuh bermakna pangkalan data perlu mencari baris yang diperlukan dari awal hingga akhir. Biasanya ini memerlukan penambahan indeks untuk pengoptimuman.
  • Nota: Apabila mengoptimumkan SQL, anda mesti mengoptimumkan sekurang-kurangnya julat, dan disyorkan untuk mengoptimumkan kepada ref, sebaik-baiknya const.
  • 3.6, possible_keys
  • possible_keys: Lajur ini menunjukkan indeks

    yang boleh digunakan oleh pertanyaan untuk dicari. Apabila menerangkan, mungkin terdapat situasi di mana possible_keys mempunyai lajur, tetapi kekunci memaparkan NULL Ini kerana tidak terdapat banyak data dalam jadual, dan pangkalan data berpendapat bahawa indeks tidak membantu untuk pertanyaan ini, jadi ia memilih yang penuh. pertanyaan jadual. Jika lajur adalah NULL, tiada indeks yang berkaitan. Dalam kes ini, anda boleh menyemak klausa where untuk melihat sama ada anda boleh mencipta indeks yang sesuai untuk meningkatkan prestasi pertanyaan, dan kemudian gunakan explain untuk melihat kesannya.

    3.7, kunci

    kunci: Memaparkan kunci (indeks)

    yang pangkalan data sebenarnya memutuskan untuk digunakan. Jika tiada indeks dipilih, nilai kunci adalah NULL. Indeks boleh dipaksa untuk digunakan atau diabaikan. 3.8, key_len

    key_len: Lajur ini menunjukkan bilangan bait

    yang digunakan oleh pangkalan data dalam indeks Nilai ini boleh digunakan untuk mengira penggunaan indeks yang tertentu lajur, pengiraan berangka adalah seperti berikut: Jenis rentetan

    char(n): n byte length

    varchar(n): 2 bait panjang rentetan simpanan, jika utf-8 , maka panjangnya ialah 3n 2

    jenis angka tinyint: 1 bait smallint: 2 bait

    int: 4 bait

    bigint: 8 bait

    Jenis masa

    tarikh: 3 bait

    cap masa: 4 bait
    masa tarikh: 8 bait

    Jika medan membenarkan NULL, 1 bait diperlukan untuk merekodkan sama ada NULL

    Nota: Panjang indeks maksimum ialah 768 bait Apabila rentetan terlalu panjang, pangkalan data akan melakukan proses yang serupa dengan indeks awalan kiri dan mengekstrak separuh pertama aksara untuk pengindeksan.




    3.9, ref

    ref: Lajur ini menunjukkan

    nilai carian jadual dalam indeks rekod lajur utama Lajur atau pemalar

    , yang biasa ialah: const (malar), func, null, nama medan (contoh: film.id) 3.10, baris

    baris: Lajur ini ialah

    bilangan baris yang dianggarkan dibaca dan diimbas oleh pangkalan data

    Ambil perhatian bahawa ini bukan bilangan baris dalam set hasil, jadi semakin kecil nilainya, lebih baik . 3.11, ditapis

    ditapis: Kembalikan bilangan baris dalam hasil

    sebagai peratusan bilangan baris dibaca

    , lebih tinggi nilai Lebih besar lebih baik. 3.12, Tambahan

    tambahan: Lajur ini memaparkan

    maklumat tambahan

    , yang tidak disertakan dalam lajur lain Maklumat , nilai khusus adalah seperti berikut: berbeza: Selepas pangkalan data menemui baris pertama yang sepadan, ia berhenti mencari lebih banyak baris untuk gabungan baris semasa; >

    tidak wujud: Pangkalan data boleh melakukan pengoptimuman LEFT JOIN pada pertanyaan Selepas mencari baris yang sepadan dengan standard LEFT JOIN, tiada lagi baris akan disemak dalam jadual untuk gabungan baris sebelumnya 🎜>julat diperiksa untuk setiap rekod (peta indeks: #): Pangkalan data tidak menemui indeks yang baik yang boleh digunakan, tetapi mendapati bahawa jika nilai lajur daripada jadual sebelumnya diketahui, ia mungkin sebahagiannya Indeks boleh digunakan;

    • menggunakan failsort (titik utama): pangkalan data akan menggunakan indeks luaran untuk mengisih keputusan, bukannya membaca baris daripada jadual dalam susunan indeks. Pada masa ini, mysql akan menyemak imbas semua rekod yang layak mengikut jenis sambungan, menyimpan kata kunci pengisihan dan penunjuk baris, dan kemudian mengisih kata kunci dan mendapatkan maklumat baris mengikut tertib. Dalam kes ini, secara amnya perlu mempertimbangkan

      menggunakan indeks untuk mengoptimumkan
    • ;
    • menggunakan indeks (titik utama): hanya gunakan maklumat dalam pepohon indeks Terdapat tidak perlu mencari lebih lanjut untuk membaca baris sebenar untuk mendapatkan semula maklumat lajur dalam jadual, yang bermaksud
    • pilih menggunakan indeks penutup tanpa perlu kembali ke pertanyaan jadual

    • menggunakan sementara (titik utama): Pangkalan data perlu mencipta jadual sementara untuk mengendalikan pertanyaan Situasi ini biasa mengikut urutan dan kumpulan mengikut. Apabila ini berlaku, pengoptimuman biasanya perlu dilakukan ialah menggunakan indeks untuk mengoptimumkan; barisan. Iaitu membaca keseluruhan data dahulu, dan kemudian menyemak mengikut keadaan di mana Jika ia sepadan, ia akan disimpan, jika ia tidak sepadan, ia akan dibuang; menggunakan keadaan indeks: serupa dengan Menggunakan where, lajur pertanyaan Tidak diliputi sepenuhnya oleh indeks, keadaan where ialah julat lajur utama; ), Menggunakan kesatuan(...), Menggunakan intersect(.. .): Fungsi ini menggambarkan cara menggabungkan imbasan indeks untuk jenis gabungan index_merge

    • menggunakan indeks untuk kumpulan mengikut: Sama seperti menggunakan kaedah indeks untuk mengakses jadual, Menggunakan indeks untuk kumpulan mengikut bermakna pangkalan data telah menemui indeks yang boleh digunakan untuk membuat pertanyaan kumpulan oleh atau Semua lajur, jangan cari cakera keras untuk mengakses jadual sebenar. lajur utama indeks, yang bermaksud bahawa indeks digunakan, tetapi beberapa medan tidak diliputi oleh indeks dan mesti dilaksanakan melalui "pulangan jadual". jika indeks digunakan tetapi operasi pemulangan jadual diperlukan, operasi pemulangan jadual harus dielakkan.

    • [Cadangan berkaitan:

      tutorial video mysql
    • ]

    Atas ialah kandungan terperinci Apakah rancangan pelaksanaan dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn