2013-09-25 32 views
0

我试图创建一个脚本,显示最受到查看的文档,但它创建了很多临时表在磁盘上...... 这里的查询,我看不出错误在哪里或查询变为滥用的地方。我无法提高此查询的效率

select 
notas.notid, 
notas.ttl, 
notas.brv, 
notas.fch, 
nots.notid, 
nots.cnt, 
nots.fch, 
nots.sccn, 
SUM(nots.hit) AS lasuma 
FROM cadenano_cbc_noticias.notas 
INNER JOIN cadenano_cbc_relacbc.nots 
ON notas.notid = nots.notid 
WHERE nots.cnt = 'notas' 
AND nots.fch BETWEEN CURDATE() - INTERVAL 3 DAY AND CURDATE() 
GROUP BY nots.notid 
ORDER BY lasuma DESC 
LIMIT 10 

有人能指出我正确的方向吗?

+3

显示您的表格定义。优化查询通常与索引有关。 –

+0

请发帖解释SELECT也。你有没有索引nots.fch = –

回答

1

如果您查看使用数据进行计算的查询部分,则可以加快查询速度:主要有where个子句和order个子句。

如果您尚未添加索引nots.cntnots.fch

这也是一个很好的做法,运行explain

explain select notas.notid, ... 

输出会告诉你,如果使用了,并且在未键。

+0

我对所有列执行EXPLAIN SELECT,这是什么出来 这些是与索引。 notas.notid, notas.fch 这些不被索引 notas.ttl, notas.brv, nots.notid, nots.cnt, nots.fch, nots.sccn, 穷人.hit 我对所有列执行了EXPLAIN SELECT,这就是出来的。 这些是索引的。 notas.notid, notas.fch。 这些不被索引... nnotas.ttl, nnotas.brv, nnots.notid, nnots.cnt, nnots.fch, nnots.sccn, nots.hit 所以对我可以看到和理解我必须索引:nots.cnt和nots.hit 我是否正确? –