我的查询消耗了服务器CPU的大量处理器时间

时间:2013-12-05 06:15:11

标签: mysql cpu processor

以下查询用于显示上个星期内点击率最高且过时的“新闻”。

由于该表现在有超过14000条记录,因此查询占用了服务器CPU的大量处理器时间

说明: 1 SIMPLE news ref state state 4 const 20619使用where;使用filesort

的索引:

编辑编辑下拉首页BTREE是否ID 20635 A否
编辑编辑掉落状态BTREE否否状态3 A否
编辑编辑丢弃优先级BTREE否无优先级1 A否
编辑编辑下拉日期BTREE否无日期20635 A是 点击20635 A No. 编辑编辑Drop Drop cat FULLTEXT否No cat 1是 编辑编辑下拉列表标题FULLTEXT否否标题1否
文字1否

$timeago = strtotime("-1 week");

SELECT id, title, sub_title, date, image_url, hits, text, comment
    FROM news
    WHERE state = '2'
    ORDER BY date >= $timeago DESC, hits DESC
    LIMIT 6

我的问题是如何设法以避免大量消耗CPU的方式重新编码查询?

2 个答案:

答案 0 :(得分:1)

使用explain plan查看发生的情况。您至少会在日期或日期创建索引并点击

<强>更新 我认为下面也会更好,

SELECT id, title, sub_title, date, image_url, hits, text, comment
FROM news
WHERE state = '2' and date >= $timeago
ORDER BY date DESC, hits DESC
LIMIT 6

答案 1 :(得分:0)

嗯,问题是,MySQL必须经过所有14,000条记录并按时间排序才能完成您的请求。您需要索引日期/时间列以使此查询更有效,否则它将使用大量资源,您必须显着升级服务器。