Rumah > pangkalan data > tutorial mysql > Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan SELECT MySQL yang Lambat untuk Meningkatkan Prestasi Halaman Web?

Bagaimanakah Kami Boleh Mengoptimumkan Pertanyaan SELECT MySQL yang Lambat untuk Meningkatkan Prestasi Halaman Web?

Linda Hamilton
Lepaskan: 2024-12-30 08:39:14
asal
519 orang telah melayarinya

How Can We Optimize a Slow MySQL SELECT Query to Improve Web Page Performance?

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:

  • data_poster: Menyimpan data pada poster individu.
  • kategori_poster: Menyenaraikan semua kategori yang tersedia (cth., filem, seni).
  • poster_prodcat: Memautkan poster ke kategori masing-masing, dengan berbilang entri mungkin untuk satu poster.

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
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan