我不确定这是sql服务器优化问题还是查询问题,但现在开始了。
我有一个来自不同新闻机构的文章的数据库,我继承了这些文章。有两个表: news_articles和news_outlets。我试图确定不同文章的数量,允许同一篇文章在多个站点上发表(数据库中有很多重复的文章)。
以下是我的查询:
SELECT outs.id, outs.site, COUNT(DISTINCT CONCAT(arts.body_text, outs.site)) AS Article_Count, outs.alignment
FROM news_articles arts
INNER JOIN
news_outlets outs ON arts.outlet_id = outs.id
WHERE
arts.search_perc > 0.0
AND
arts.search_perc < 0.85
AND
outs.out_type < 3
GROUP BY outs.site, outs.alignment注意:不幸的是,由于数据库的最初设计(我没有时间修复),每个实际的新闻媒体也有多个outlet_ids (假设一个web爬虫返回mobile.cnn.com和www.cnn.com的相同页面,您就有了问题;每个outlet_id都有一个单独的outlet_id)。这不是我现在就能轻易解决的问题。
outs.site、outs.alignment、ids和outs.out_type都有索引。所有的表都是无害的。news_outlets约有800个记录,news_articles约有600万个记录。这是使用MySQLdb从python连接到服务器(在同一工作站上)运行的。该工作站是今年的2.7GHz i5,内存为16 of。我没有对my.cnf做太多修改,但我确实修改了以下内容: innodb_buffer_pool_size = 12288M
不管是哪种方式,这似乎都没有多大区别。
这个查询运行了很长一段时间(虽然并不总是--当我昨晚运行一个非常类似的查询时,它看起来要快得多)。我知道它做了很多,所以这是可以理解的。然而,解释说有两个简单的过程:一个使用where,文件短;另一个使用索引条件和位置。
每当我运行时,它都会说查询正在创建排序索引。然而,cpu的使用率最高达到5%。
这是一个服务器优化问题吗?一个查询优化问题?我怎么才能修好它?我有大约60个这样的查询要运行-没有一个已经完成;我倾向于在10-20分钟后杀死他们。
提前谢谢你。
发布于 2014-08-21 20:16:35
来自评论的答复
我将假设计数需要大量无法优化的处理(至少在MySQL中不是这样)。你需要这个吗?你需要用这样的方式来数吗?因为你是通过id加入的,所以我不认为outs.site对于每一个接口都是不同的。因此,至少要将其更改为计数(不同的arts.body_text)。
您不需要检查这两个字段,因为outs.site不可能在一个结果行中进行更改。你在那个专栏上做一个小组。
发布于 2014-08-21 19:54:30
SELECT outs.id,
outs.site,
COUNT(DISTINCT CONCAT(arts.body_text, outs.site)) AS Article_Count, outs.alignment FROM (SELECT *
FROM news_articles na
WHERE na.search_perc > 0.0
AND na.search_perc < 0.85)arts INNER JOIN ( SELECT *
FROM news_outlets no
WHERE outs.out_type < 3) outs ON arts.outlet_id = outs.id GROUP BY outs.site, outs.alignment发布于 2014-08-22 19:00:25
尝试这个-另一个选项,我需要写这个而不了解您的表结构 SELECT outs.id, outs.site, outs.alignment, ( SELECT COUNT ( DISTINCT (arts.body_text) FROM news_articles na WHERE no.outlet_id = na.id AND na.search_perc > 0.0 AND na.search_perc < 0.85) AS Article_Count COUNT(DISTINCT CONCAT(arts.body_text, outs.site)) FROM news_outlets no WHERE outs.out_type < 3。
https://stackoverflow.com/questions/25434656
复制相似问题