优化 MySQL 查询以减少执行时间并消除磁盘 I/O
在典型的 Web 应用场景中,数据库查询的性能对于保持响应式的用户体验至关重要。本文解决了一个特定的 MySQL 查询,该查询执行时间缓慢,导致网站性能不佳。
相关查询连接三个表:“poster_data”、“poster_categories”和“poster_prodcat”。它的目的是根据“poster_prodcat”表上的特定条件从表中检索数据。查询执行计划揭示了“poster_prodcat”表的参与及其写入磁盘的情况,表明数据检索效率低下。
为了解决性能问题,我们探索了一种涉及重组数据库和查询的替代方法。具体来说,我们创建了名为“poster”、“category”和“poster_category”的新表。 “poster_category”表在 (cat_id, poster_id) 列上设计有聚集复合索引。
使用这个新架构,我们重写了原始查询,如下所示:
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;
重写查询的 EXPLAIN 计划揭示了性能的显着改进。查询现在有效地使用索引,减少了对磁盘 I/O 的需求并最大限度地减少了执行时间。
以上是数据库重组如何优化缓慢的 MySQL 查询并消除磁盘 I/O?的详细内容。更多信息请关注PHP中文网其他相关文章!