Permintaan Pilih MySQL Perlahan Dioptimumkan untuk Meningkatkan Prestasi
Pertanyaan MySQL ini telah menghadapi kelewatan kerana kerumitan dan volum datanya. Untuk mengurangkan perkara ini, adalah penting untuk memahami hubungan antara jadual yang terlibat:
Pertanyaan asal, seperti berikut, dipamerkan masa pelaksanaan yang panjang, terutamanya apabila digunakan dalam halaman web penciptaan:
SELECT * FROM poster_prodcat, poster_data, poster_categories WHERE poster_data.apnumber = poster_prodcat.apnumber AND poster_categories.apcatnum = poster_prodcat.apcatnum AND poster_prodcat.apcatnum='623' ORDER BY aptitle ASC LIMIT 0, 32
Analisis Pelan Pelaksanaan:
Hambatan prestasi pertanyaan telah dikenal pasti dalam output 'terangkan':
[Jelaskan Pautan Imej]
Seperti yang diperhatikan, pertanyaan perlu menulis data ke cakera, memberi kesan yang ketara kelajuan.
Penyelesaian:
Untuk menangani isu ini, skema yang disemak telah direka bentuk menggunakan pengindeksan komposit. Struktur baharu ini menunjukkan peningkatan yang ketara dalam prestasi:
DROP TABLE IF EXISTS poster; CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS category; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS poster_category; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id) -- Note the clustered composite index !! ) ENGINE = INNODB;
Dengan indeks komposit disediakan, pertanyaan yang disemak berikut menghasilkan keputusan sepantas kilat:
SELECT p.*, c.* FROM poster_category pc INNER JOIN category c ON pc.cat_id = c.cat_id INNER JOIN poster p ON pc.poster_id = p.poster_id WHERE pc.cat_id = 623 ORDER BY p.name LIMIT 32;
Pendekatan yang dioptimumkan ini menyelesaikan masalah dengan berkesan. isu prestasi, menjadikan halaman web aplikasi responsif dan mesra pengguna.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan SELECT MySQL yang Lambat untuk Meningkatkan Prestasi Halaman Web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!