我有2张 table 。 1是音乐,2是listenTrack。 listenTrack跟踪每首歌曲的独特播放。我试图获得当月流行歌曲的搜索结果。我得到了我的结果,但是它们花费的时间太长了。下面是我的表和查询
430,000行
CREATE TABLE `listentrack` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sessionId` varchar(50) NOT NULL,
`url` varchar(50) NOT NULL,
`date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` varchar(150) NOT NULL,
`user_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=731306 DEFAULT CHARSET=utf8
12500行
CREATE TABLE `music` (
`music_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`title` varchar(50) DEFAULT NULL,
`artist` varchar(50) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`genre` int(4) DEFAULT NULL,
`file` varchar(255) NOT NULL,
`url` varchar(50) NOT NULL,
`allow_download` int(2) NOT NULL DEFAULT '1',
`plays` bigint(20) NOT NULL,
`downloads` bigint(20) NOT NULL,
`faved` bigint(20) NOT NULL,
`dateadded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`music_id`)
) ENGINE=MyISAM AUTO_INCREMENT=15146 DEFAULT CHARSET=utf8
SELECT COUNT(listenTrack.url) AS total, listenTrack.url
FROM listenTrack
LEFT JOIN music ON music.url = listenTrack.url
WHERE DATEDIFF(DATE(date_created),'2009-08-15') = 0
GROUP BY listenTrack.url
ORDER BY total DESC
LIMIT 0,10
我不认为此查询不是很复杂,行也不是太大。
有什么办法可以加快速度吗?还是您可以提出更好的解决方案?每月开始时,这将是一项艰巨的工作,但我也想按日完成结果。
哦,顺便说一句,我在本地运行此程序,运行时间超过4分钟,但在生产过程中大约需要45秒
最佳答案
我更像是一个SQL Server专家,但这些概念应该适用。
我要添加索引:
这些索引将极大地加快查询速度(我本来就是把表名混在一起-在最新编辑中已修复)。
关于php - MySQL加入缓慢。任何加快速度的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1291145/