慢速 MySQL 选择查询优化以提高性能
此 MySQL 查询由于其复杂性和数据量而面临延迟。为了缓解这种情况,必须了解所涉及的表之间的关系:
原始查询如下所示执行时间过长,尤其是在网页创建中使用时:
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中文网其他相关文章!