首页 > 数据库 > mysql教程 > 我们如何优化缓慢的 MySQL SELECT 查询以提高网页性能?

我们如何优化缓慢的 MySQL SELECT 查询以提高网页性能?

Linda Hamilton
发布: 2024-12-30 08:39:14
原创
504 人浏览过

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

慢速 MySQL 选择查询优化以提高性能

此 MySQL 查询由于其复杂性和数据量而面临延迟。为了缓解这种情况,必须了解所涉及的表之间的关系:

  • poster_data:存储各个海报的数据。
  • poster_categories: 列出所有可用类别(例如电影、艺术)。
  • poster_prodcat:将海报链接到各自的类别,单个海报可以有多个条目。

原始查询如下所示执行时间过长,尤其是在网页创建中使用时:

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
登录后复制

分析执行计划的:

在“解释”输出中确定了查询的性能瓶颈:

[解释图像链接]

据观察,查询有将数据写入磁盘,显着影响

解决方案:

为了解决此问题,使用复合索引设计了修订后的架构。这种新结构展示了性能的显着改进:

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;
登录后复制

使用复合索引后,以下修改后的查询产生了闪电般的结果:

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;
登录后复制

这种优化方法有效解决了性能问题,使应用程序网页响应灵敏且用户友好。

以上是我们如何优化缓慢的 MySQL SELECT 查询以提高网页性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板