【问题标题】:Mysql Big Table OptimizationMysql大表优化
【发布时间】:2015-01-26 14:48:29
【问题描述】:

我们有一个已有 10 年历史的网站一直在使用 SMF。现在我们编写了自己的论坛脚本,但由于我们是没有经验的开发人员,我们对优化一无所知。我们的消息表太大(大约 2 GB,包括索引,总共 2.654.​​193 行)。 SMF 使用此表的速度非常快,但我们的新论坛脚本导致系统平均负载较高。

这里是查询列表:http://i.imgur.com/NPm0DmM.jpg

这里是表结构和索引:http://i.imgur.com/FwPdMoI.jpg

注意:我们使用 APC 进行加速,使用 Memcached 进行缓存。我百分百确定消息表(可能还有主题表)正在减慢我们的网站速度。

【问题讨论】:

  • 使用更少的 IN() 的更多连接。可排序列上有更多索引
  • 尝试使用 xdebug profiler 查看 PHP 方面的速度变慢了。还可以在 MySQL 慢查询日志中调试慢查询,以查看 MySQL 方面的速度变慢,分析它们并考虑使用正确的索引。也尽量避免 count(*) - 而是使用 count(id)
  • @sanis SELECT * FROM topics as t1 LEFT JOIN (SELECT id, topic_id as tid, poster, body, post_date, poster_ip, subject FROM messages as t9 ORDER BY post_date DESC) as t2 ON t1.topic_id = t2.tid WHERE (super_pinned = 0 AND pinned = 0) AND (room_id = 45 OR (mirror_id = 45 AND room_id IN (45))) GROUP BY t1.topic_id 这个查询需要很长时间。我该如何优化它?
  • 如果可能的话,删除子选择并将其移动到单独的查询中。子选择非常慢。我并没有深入了解数据库结构,无法准确说明如何处理此查询。我只能说,尽量避免子选择。

标签: php mysql optimization indexing


【解决方案1】:

现在正是了解 SQL 索引的最佳时机。

Proper indexing is THE way to improve SQL performanceIndexing has to be done by developers.

考虑从这里开始(这是我的书的免费网络版SQL Performance Explained

主要免责声明:所有链接都指向我自己的内容。

【讨论】:

  • 虽然我通过编辑查询解决了问题,但我会尽快阅读您的内容。谢谢。
猜你喜欢
  • 2011-07-30
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多