我一直在研究编写这个查询的最佳方法,但我似乎无法提高性能。
该查询用于构建"趋势主题"标签云。
表中大约有一百万张唱片,而且还在增长。
InnoDB表结构是…
id-int(15)[AI,Primary,Unique]
主题-varchar(50)
日期时间
这是我的疑问。。。
SELECT topic, COUNT(topic) AS topicCount
FROM table
WHERE datetime > DATE_SUB( NOW(), INTERVAL 24 HOUR) AND topic!=''
GROUP BY topic HAVING topicCount>1
ORDER BY topicCount DESC
LIMIT 10
查询的性能徘徊在300ms左右,这太慢了。
我为主题添加了一个索引,但性能跳到了1400毫秒。
有没有一种更有效的方法来编写这个查询,从而大大提高性能?
您已经对主题进行了索引,但这不会提高性能。
在datetime
中添加索引,因为您正在进行范围搜索,并且在该列上添加索引将提高性能。