Ben 2 tablolar var. 1 müzik ve 2. listenTrack olduğunu. listenTrack her şarkının benzersiz oyunlarını izler. Ben ayın popüler şarkılar için sonuçlar almak için çalışıyorum. Ben sonuç alıyorum ama onlar sadece çok uzun alıyor. Aşağıda benim tablolar ve sorgu
430.000 satırlar
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 satırlar
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
Bu sorgu çok karmaşık değil ve satırları çok büyük değil, ben sanmıyorum.
Bu hızlandırmak için herhangi bir yolu var mı? Ya da daha iyi bir çözüm önerebilir? Bu, her ayın uzaklaştırmak bir cron işi olacak ama aynı zamanda gün sonuçlarına göre yapmak istiyorum.
Oh btw i çalıştırmak için 4 dakika boyunca, bu yerel çalıştırıyorum, ama eşya üzerinde yaklaşık 45 saniye sürer