需要优化 MySQL 查询以在 Solr 中使用该查询

Posted

技术标签:

【中文标题】需要优化 MySQL 查询以在 Solr 中使用该查询【英文标题】:Need to optimize the MySQL query to use that one in Solr 【发布时间】:2012-01-26 20:23:16 【问题描述】:

我需要优化以下查询。现在,服务器需要 1 分 54 秒,我需要优化此查询以运行不到一分钟意味着不到 60 秒。

SELECT 
      a.article_id, 
      a.provider_id, 
      a.status, 
      a.modified_at, 
      a.published_at, 
      a.title, 
      a.summary, 
      a.image, 
      GROUP_CONCAT(af.feed_id SEPARATOR ', ') AS feed_id_list 
   FROM 
      article a 
         INNER JOIN  article_feed af
            ON af.article_id = a.article_id 
   GROUP BY 
      a.article_id 
   ORDER BY
      NULL

如何优化此查询以使其在 60 秒内执行?

这里是查询的解释。

id|Select_type|table|type |Possible_keys|key |Key_len|ref |rows |extra 1 |简单 | af |index |primary |primary|7 |NULL |1791305|使用索引;使用临时 1 |简单 | a |Eq_ref|primary |primary|4 |Feed.af.article_id| 1 | -

【问题讨论】:

1.54 秒小于 60 秒。恭喜,你做到了! 好的,我错过了什么吗?服务器上的 1.54 秒小于 60 秒...article_feed 表是否在 article_id 上有索引?有多少篇文章(大约),有多少篇文章供稿...... EXPLAIN SELECT ... 说什么? 为了优化,我们需要查询(检查)、模式和解释,但由于我们没有数据,这仍然是一种反复试验。 我已经更新并附上了查询的解释。 zerkms:这不是 1.54 秒,而是 1 分 54 秒。 【参考方案1】:

您从表中选择所有内容,加入另一个表并对结果集进行分组。

显然读取 170 万行需要一些时间。

所以唯一的建议可能是 - 购买更快的存储(即 SSD),因为无论如何您都需要读取所有数据以返回结果

【讨论】:

感谢 Zerkms 的回复。我们正在使用 NetApp 存储解决方案。并且很难改变那个甚至不值得选择。我正在寻找另一种解决方案。

以上是关于需要优化 MySQL 查询以在 Solr 中使用该查询的主要内容,如果未能解决你的问题,请参考以下文章

需要优化查询以在索引视图中使用

solr查询优化(实践了一下效果比较明显)

我应该启用哪个包来在 tomcat 日志或控制台中记录 Solr 查询?

solr4.9同步mysql数据

如何大幅优化solr的查询性能

Solr简介和使用(一期)