优化 MySQL 选择查询以提高性能并减少磁盘空间
需要几分钟才能执行的缓慢 MySQL 查询是常见的性能问题由开发商。在此场景中,查询从三个表中检索数据以显示网页。使用EXPLAIN命令进行调查后发现,该查询将中间结果写入磁盘,导致了严重的性能瓶颈。
为了优化查询,采取了综合方法:
表结构分析
查询使用了三个表:poster_data、poster_categories 和 poster_prodcat。 Poster_data 包含有关各个海报的信息,而 poster_categories 列出了所有类别(例如电影、艺术)。 Poster_prodcat 保存海报 ID 和相关类别。主要瓶颈是在 poster_prodcat 中发现的,该系统有超过 1700 万行和大量正在过滤的特定类别的结果(大约 400,000 个)。
索引优化
EXPLAIN 输出显示查询缺乏最佳索引,导致数据访问效率低下且执行缓慢。主要问题是 poster_prodcat.apcatnum 列上缺少用于过滤的索引。在没有索引的情况下,MySQL 优化器采用全表扫描,导致磁盘 I/O 过多,执行时间过长。
查询重写
来解决性能问题问题,使用更有效的方法重写了查询:
临时表创建
为了缓解磁盘空间使用问题,优化查询被进一步修改以创建一个存储中间结果的临时表。这种方法允许查询绕过将数据写入磁盘,从而显着提高性能。
其他优化
除了主要优化之外,还实施了一些附加措施来进一步增强查询性能:
结论
通过解决索引、查询结构和临时表使用问题,对原始查询进行了优化,以提高性能并减少磁盘空间使用。这种优化显着减少了执行时间,使网页生成的响应速度更快。
以上是如何优化缓慢的 MySQL SELECT 查询以提高性能并减少磁盘空间使用?的详细内容。更多信息请关注PHP中文网其他相关文章!