Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan kandungan yang berkaitan tentang pengindeksan untuk mengoptimumkan prestasi aplikasi PHP. Mari kita lihat bersama-sama.
Dua bulan yang lalu, seorang rakan ingin membuat projek Untuk tujuan promosi dalam talian yang pantas, dia secara langsung membeli sebuah syarikat Kod sumber dan biarkan penjual menggunakannya dalam talian. Selepas melihat kod sumber, saya terus berkata kepada rakan saya: Saya telah ditipu Kualiti kod sumber ini agak teruk, dan mungkin terdapat masalah prestasi yang serius apabila bilangan pengguna meningkat.
Saya mempunyai asas untuk membuat penilaian sedemikian:
Sebagai aplikasi hampir masa nyata, kod teras ditulis dalam PHP, dan keselarasan banyak senario dikawal melalui rekod jadual pangkalan data dan permintaan berulang; (crontab) untuk mencapai program berjalan tanpa henti, jadi sangat hebat Puluhan tugas berjadual curl dilaksanakan setiap minit; Fail .php dalam kod. Sukar untuk mengetahui kewujudan mereka sepintas lalu. mengelirukan.
Sudah tentu, kod yang boleh menjana wang ialah kod yang bagus (pihak lain menjana wang melalui kod ini), jadi saya tidak terlalu risau mengenainya. Pemikiran awal ialah dengan konfigurasi 4-teras 8G, sukar untuk melayani 10,000 pelanggan, tetapi 5,000 sudah memadai.
Baru minggu ini, saya tiba-tiba menerima mesej teks penggera dan e-mel yang kerap daripada Alibaba Cloud, mengatakan bahawa penggunaan CPU terlalu tinggi. Adakah anda fikir promosi pemasaran berjalan lancar dan bilangan pengguna telah meningkat dengan ketara? Apabila saya bertanya kepada rakan-rakan saya, terdapat kurang daripada 300 pengguna!
mysql telah menduduki lebih daripada 200% sumber CPU. Setelah membaca kod sumber, saya tahu bahawa terdapat sebab untuk penggunaan MySQL yang tinggi dan ia mungkin, tetapi saya masih mahu melihat mengapa ia menggunakan begitu banyak sumber.
Log masuk ke pelayan MySQL dan semak sama ada log perlahan didayakan: tunjukkan pembolehubah seperti '%slow%' dan ketahui log pertanyaan perlahan didayakan:
Teruskan Semak log dan mendapati bahawa pernyataan SQL tertentu sentiasa muncul dalam log:Anda dapat melihat bahawa lebih daripada 380,000 baris rekod telah diimbas apabila pernyataan SQL ini dilaksanakan. Satu daripada dua jadual yang terlibat dalam penyata mempunyai lebih daripada 600 rekod, dan satu lagi mempunyai lebih daripada 40,000 rekod Ini bersamaan dengan mengimbas keseluruhan jadual dengan lebih daripada 40,000 rekod.
Kemudian semak indeks kedua-dua jadual Kecuali untuk id yang ditambah secara automatik sebagai kunci utama, tiada indeks lain dibuat. Gunakan explain untuk melaksanakan pernyataan, yang menunjukkan bahawa tiada indeks digunakan:
Seterusnya, buat indeks pada lajur uid dan session_id bagi syarat pertanyaan pada dua jadual. Selepas penciptaan indeks selesai, penggunaan CPU yang kelihatan dan beban sistem dikurangkan. Gunakan explain sekali lagi untuk melaksanakan pernyataan pertanyaan Maklumat indeks telah digunakan dan bilangan baris yang diimbas telah dikurangkan dengan banyak:
Selepas pengoptimuman di atas, keseluruhan penggunaan CPU. daripada aplikasi semasa ialah 5%. Sekitar 15%, penggunaan CPU MySQL menurun daripada 4 kepada 0.3. Akhir sekali, tidak perlu risau tentang isu prestasi buat masa ini Walaupun konfigurasi pelayan dikurangkan kepada 1 teras CPU, ia masih boleh mengekalkannya.
Semak kod dan gabungkan dengan log untuk membuat indeks dan mengubah suai beberapa pernyataan pertanyaan Penggunaan CPU menurun kepada kira-kira 6%. >
Dalam projek pembangunan, jurutera bukan sahaja mesti menulis kod "boleh digunakan", tetapi juga kod "mudah digunakan". Dalam contoh ini, dengan mencipta dua indeks, prestasi sistem boleh dipertingkatkan dengan ketara, iaitu menukar kod daripada "boleh guna" kepada "mudah digunakan".
Pengoptimuman prestasi yang disebut dalam artikel ini memfokuskan pada operasi dan penyelenggaraan, dan pengoptimuman prestasi dalam kod masih belum disentuh. Tetapi prinsip umum adalah betul: gunakan lebih banyak cache dan kurangkan bacaan segerak daripada peranti IO perlahan sebanyak mungkin.
Pembelajaran yang disyorkan: "tutorial video mysql", "Tutorial video PHP"
Atas ialah kandungan terperinci Cipta indeks MySQL untuk mengoptimumkan prestasi aplikasi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!