apakah petunjuk mysql
Dalam mysql, pembayang merujuk kepada "petunjuk pengoptimuman pertanyaan", yang akan menggesa pengoptimum untuk menjana pelan pelaksanaan untuk pengoptimuman dengan cara tertentu, menjadikan pernyataan SQL pengguna lebih fleksibel berdasarkan jadual Peraturan seperti susunan sambungan, kaedah, laluan akses dan selari mempunyai kesan pada pernyataan DML (Bahasa Manipulasi Data).
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
Kami boleh menambah ulasan semasa mengendalikan jadual, medan atau indeks untuk meningkatkan kebolehbacaan kod supaya orang lain dapat memahami kod dengan cepat Ini adalah petua untuk orang yang menggunakan pangkalan data yang sama, terdapat satu lagi Petua dipanggil petunjuk, adalah petunjuk kepada pangkalan data.
Apakah pembayang
petunjuk merujuk kepada "petunjuk pengoptimuman pertanyaan", yang akan menggesa pengoptimum untuk mengoptimumkan dengan cara tertentu, membolehkan anda kepada Pernyataan SQL adalah lebih fleksibel, yang akan menjadikan pertanyaan anda lebih cepat, sudah tentu, ia juga mungkin lebih perlahan, semuanya bergantung pada pemahaman anda tentang pengoptimum dan pemahaman anda tentang senario.
Kami tahu bahawa apabila melaksanakan pernyataan SQL, MySQL akan menjana pelan pelaksanaan dan pembayang memberitahu pengoptimum pertanyaan untuk menjana pelan pelaksanaan mengikut cara kami memberitahunya.
Petunjuk boleh bertindak pada pernyataan DML (Bahasa Manipulasi Data) berdasarkan susunan sambungan jadual, kaedah, laluan akses, selari dan peraturan lain adalah seperti berikut:
使用的优化器类型; 基于代价的优化器的优化目标,是all_rows还是first_rows; 表的访问路径,是全表扫描,还是索引扫描,还是直接用rowid; 表之间的连接类型; 表之间的连接顺序; 语句的并行程度;
Petua biasa
Force index FORCE INDEKS
SELECT * FROM tbl FORCE INDEX (FIELD1) …
Abaikan indeks ABAIKAN INDEX
SELECT * FROM tbl IGNORE INDEX (FIELD1, FIELD2) …
Matikan penimbal pertanyaan SQL_NO_CACHE
SELECT SQL_NO_CACHE field1, field2 FROM tbl;
Apabila anda perlu menanyakan data masa nyata dan kekerapan tidak tinggi, anda boleh mempertimbangkan untuk menggunakan buffer Off, iaitu MySQL tidak akan mencari dalam buffer tanpa mengira sama ada SQL ini telah dilaksanakan.Paksa query caching SQL_CACHE
SELECT SQL_CACHE * FROM tbl;
Fungsi ini adalah bertentangan dengan yang sebelumnya, tetapi ia hanya berfungsi apabila query_cache_type dalam my.ini ditetapkan kepada 2.Keutamaan operasi HIGH_PRIORITY
HIGH_PRIORITY boleh digunakan dalam memilih dan memasukkan operasi untuk memberitahu MYSQL bahawa operasi ini diutamakan.SELECT HIGH_PRIORITY * FROM tbl;
Kendalian Lagging LOW_PRIORITY
LOW_PRIORITY boleh digunakan dalam operasi sisipan dan kemas kini untuk memberitahu mysql bahawa operasi ini ketinggalan.update LOW_PRIORITY tbl set field1= where field1= …
Sisipan tertunda INSERT DELAYED
INSERT DELAYED INTO tbl set field1= …
bermakna pelanggan menghantar permintaan sisipan data dan MySQL mengembalikan status OK tetapi sebenarnya tidak laksanakannya Sebaliknya, ia disimpan dalam memori dan beratur, dan kemudian dimasukkan apabila mysql mempunyai ruang.
Faedah penting ialah permintaan sisipan daripada berbilang pelanggan dikumpulkan bersama dan ditulis ke dalam satu blok, yang jauh lebih pantas daripada melakukan banyak sisipan secara bebas.
Kelemahannya ialah ID yang ditambah secara automatik tidak dapat dikembalikan, dan apabila sistem ranap, data yang belum sempat dimasukkan MySQL akan hilang.Pesanan sambungan paksa STRAIGHT_JOIN
SELECT tbl.FIELD1, tbl2.FIELD2 FROM tbl STRAIGHT_JOIN tbl2 WHERE …
Seperti yang dapat dilihat daripada pernyataan SQL di atas, STRAIGHT_JOIN digunakan untuk memaksa MySQL menyambungkan jadual dalam susunan tbl dan tbl2. Jika anda fikir ia adalah lebih cekap untuk menyambung dalam pesanan anda sendiri daripada pesanan yang disyorkan oleh MySQL, anda boleh menggunakan STRAIGHT_JOIN untuk menentukan susunan sambungan.
Tidak biasa digunakan
Memaksa penggunaan jadual sementara SQL_BUFFER_RESULT
SELECT SQL_BUFFER_RESULT * FROM tbl WHERE …
Apabila terdapat banyak data dalam set hasil pertanyaan kami, anda boleh memaksa set keputusan ke dalam jadual sementara melalui pilihan SQL_BUFFER_RESULT, supaya kunci jadual MySQL boleh dikeluarkan dengan cepat (supaya pernyataan SQL lain boleh menanyakan rekod ini), dan ia boleh berkhidmat. pelanggan untuk masa yang lama. Pelanggan menyediakan set rekod yang besar.Pengelompokan menggunakan jadual sementara SQL_BIG_RESULT dan SQL_SMALL_RESULT
SELECT SQL_BUFFER_RESULT FIELD1, COUNT(*) FROM tbl GROUP BY FIELD1;
adalah sah untuk penyataan SELECT dan memberitahu MySQL untuk mengoptimumkan cara menggunakan jadual sementara untuk mengisih pertanyaan GROUP BY dan DISTINCT , SQL_SMALL_RESULT Ini bermakna set hasil adalah sangat kecil dan boleh diisih terus dalam jadual sementara dalam ingatan jika tidak, jika ia sangat besar, ia perlu diisih menggunakan jadual sementara pada cakera.SQL_CALC_FOUND_ROWS
Ia sebenarnya bukan gesaan pengoptimum, dan ia juga tidak menjejaskan rancangan pelaksanaan pengoptimum, tetapi ia akan menyebabkan set hasil dikembalikan oleh mysql untuk memasukkan jumlah bilangan baris yang terjejas oleh ini operasi, yang perlu dipadankan denganFOUND_ROWS()
Penggunaan gabungan.SQL_CALC_FOUND_ROWS
Memberitahu MySQL untuk merekodkan bilangan baris yang diproses kali ini;FOUND_ROWS()
digunakan untuk mendapatkan semula bilangan baris yang direkodkan, yang boleh digunakan pada senario halaman.
Cara umum untuk menulis halaman adalah: mula-mula semak jumlah nombor, kira bilangan halaman, dan kemudian semak butiran halaman tertentu.SELECT COUNT(*) from tbl WHERE …
SELECT * FROM tbl WHERE … limit m,n
Tetapi dengan bantuanSQL_CALC_FOUND_ROWS
, ia boleh dipermudahkan kepada tulisan berikut:SELECT SQL_CALC_FOUND_ROWS * FROM tbl WHERE … limit m,n;
SELECT FOUND_ROWS();
Yang keduaSELECT
akan kembaliSELECT
pertama ialah jumlah bilangan baris tanpa had, jadi anda hanya perlu melaksanakan pertanyaan yang memakan masa dan kompleks untuk mendapatkan jumlah baris pada masa yang sama.KUNCI DALAM MOD KONGSI, UNTUK KEMASKINI
Begitu juga, kedua-dua ini bukan petua pengoptimuman yang mengawal penyataan SELECT. Ia hanya sah untuk peringkat baris kunci, yang disokong oleh InnoDB.
Meluaskan pengetahuan:
Konsep dan perbezaan
SELECT ... LOCK IN SHARE MODE
Apa yang ditambah ialah kunci IS (kunci kongsi niat), iaitu kunci dikongsi ditambahkan pada semua baris yang layak Sesi lain boleh membaca rekod dan terus menambah kunci IS, tetapi ia tidak boleh diubah suai sehingga sesi terkunci selesai . (Jika tidak, masa tunggu kunci langsung tamat).
SELECT ... FOR UPDATE
Apa yang ditambahkan ialah kunci IX (kunci eksklusif niat), iaitu, eksklusif ditambahkan pada baris yang memenuhi syarat Sesi lain tidak boleh menambah sebarang kunci S atau kunci X pada rekod ini. Jika tiada bacaan tanpa kunci yang konsisten, sesi lain tidak boleh membaca dan mengubah suai rekod ini, tetapi innodb mempunyai bacaan tidak mengunci (bacaan syot kilat tidak memerlukan penguncian).
Oleh itu, kaedah penguncian for update
hanya menyekat kaedah pertanyaan lock in share mode
lebih daripada kaedah select...lock in share mode
dan tidak menyekat bacaan syot kilat.
Senario Aplikasi
LOCK IN SHARE MODE
terpakai pada senario penulisan dua jadual dengan hubungan Mengambil contoh rasmi MySQL, satu jadual ialah jadual anak, dan yang satu lagi ialah jadual anak. Ia adalah jadual induk. Andaikan lajur tertentu child_id jadual anak dipetakan ke lajur c_child_id jadual induk, adalah berisiko untuk memasukkan rekod child_id =100 ke dalam jadual anak pada masa ini, kerana jadual induk mungkin dilaksanakan pada masa yang sama dengan sisipan Untuk memadamkan rekod dengan c_child_id=100, terdapat risiko ketidakkonsistenan data perniagaan. Kaedah yang betul ialah melaksanakan select * from parent where c_child_id=100 lock in share mode
dahulu, kunci rekod ini dalam jadual induk, dan kemudian laksanakan insert into child(child_id) values (100)
.
[Cadangan berkaitan: tutorial video mysql]
Atas ialah kandungan terperinci apakah petunjuk mysql. 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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



Kunci utama MySQL tidak boleh kosong kerana kunci utama adalah atribut utama yang secara unik mengenal pasti setiap baris dalam pangkalan data. Jika kunci utama boleh kosong, rekod tidak dapat dikenal pasti secara unik, yang akan membawa kepada kekeliruan data. Apabila menggunakan lajur integer sendiri atau UUIDs sebagai kunci utama, anda harus mempertimbangkan faktor-faktor seperti kecekapan dan penghunian ruang dan memilih penyelesaian yang sesuai.

MySQL boleh mengembalikan data JSON. Fungsi JSON_EXTRACT mengekstrak nilai medan. Untuk pertanyaan yang kompleks, pertimbangkan untuk menggunakan klausa WHERE untuk menapis data JSON, tetapi perhatikan kesan prestasinya. Sokongan MySQL untuk JSON sentiasa meningkat, dan disyorkan untuk memberi perhatian kepada versi dan ciri terkini.

MySQL tidak boleh berjalan secara langsung di Android, tetapi ia boleh dilaksanakan secara tidak langsung dengan menggunakan kaedah berikut: menggunakan pangkalan data ringan SQLite, yang dibina di atas sistem Android, tidak memerlukan pelayan yang berasingan, dan mempunyai penggunaan sumber kecil, yang sangat sesuai untuk aplikasi peranti mudah alih. Sambungkan jauh ke pelayan MySQL dan sambungkan ke pangkalan data MySQL pada pelayan jauh melalui rangkaian untuk membaca dan menulis data, tetapi terdapat kelemahan seperti kebergantungan rangkaian yang kuat, isu keselamatan dan kos pelayan.

1. Gunakan indeks yang betul untuk mempercepatkan pengambilan data dengan mengurangkan jumlah data yang diimbas memilih*frommployeesWherElast_name = 'Smith'; Jika anda melihat lajur jadual beberapa kali, buat indeks untuk lajur tersebut. Jika anda atau aplikasi anda memerlukan data dari pelbagai lajur mengikut kriteria, buat indeks komposit 2. Elakkan pilih * Hanya lajur yang diperlukan, jika anda memilih semua lajur yang tidak diingini, ini hanya akan memakan lebih banyak pelayan dan menyebabkan pelayan melambatkan pada masa yang tinggi atau kekerapan misalnya, jadual anda

MySQL boleh mengendalikan pelbagai sambungan serentak dan menggunakan multi-threading/multi-pemprosesan untuk menetapkan persekitaran pelaksanaan bebas kepada setiap permintaan pelanggan untuk memastikan bahawa mereka tidak terganggu. Walau bagaimanapun, bilangan sambungan serentak dipengaruhi oleh sumber sistem, konfigurasi MySQL, prestasi pertanyaan, enjin penyimpanan dan persekitaran rangkaian. Pengoptimuman memerlukan pertimbangan banyak faktor seperti tahap kod (menulis SQL yang cekap), tahap konfigurasi (menyesuaikan max_connections), tahap perkakasan (meningkatkan konfigurasi pelayan).

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Sebab utama mengapa anda tidak boleh log masuk ke MySQL sebagai akar adalah masalah kebenaran, ralat fail konfigurasi, kata laluan tidak konsisten, masalah fail soket, atau pemintasan firewall. Penyelesaiannya termasuk: periksa sama ada parameter pengikat di dalam fail konfigurasi dikonfigurasi dengan betul. Semak sama ada kebenaran pengguna root telah diubahsuai atau dipadam dan ditetapkan semula. Sahkan bahawa kata laluan adalah tepat, termasuk kes dan aksara khas. Semak tetapan dan laluan kebenaran fail soket. Semak bahawa firewall menyekat sambungan ke pelayan MySQL.
