优化 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
根据 EXPLAIN 输出,查询正在执行完整的查询对海报_prodcat 表进行表扫描,该表包含超过 1700 万行。这会导致执行时间过长。
为了优化查询性能,我们可以实施以下更改:
标准化和索引:
以下是更新架构的示例:
CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (poster_id) ) ENGINE=InnoDB; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (cat_id) ) ENGINE=InnoDB; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id), INDEX (poster_id) -- Clustered composite index ) ENGINE=InnoDB;
数据标准化并建立索引后,查询应该执行得更快,从而显着减少执行时间。
以上是如何优化缓慢的 MySQL 查询以提高性能并减少磁盘 I/O?的详细内容。更多信息请关注PHP中文网其他相关文章!