我有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专家,但这些概念应该适用。

我要添加索引:

  • 在ListenTrack上,添加带有url和date_created的
  • 的索引
  • 在“音乐”上,添加带有url的索引

  • 这些索引将极大地加快查询速度(我本来就是把表名混在一起-在最新编辑中已修复)。

    关于php - MySQL加入缓慢。任何加快速度的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1291145/

    10-13 01:37