2012-04-28 59 views
0

我正在为每个用户在我的网站上记录点击时间的方法。使用数百万个MySQL行

我现在有600,000多条记录,当试图想办法去做这件事。

CREATE TABLE IF NOT EXISTS `clicktime` (
    `id` int(5) NOT NULL AUTO_INCREMENT, 
    `page` int(11) DEFAULT NULL, 
    `user` varchar(20) DEFAULT NULL, 
    `time` bigint(20) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=686277 ; 

我将不得不每10个这样的搜索每页。我的博客一次显示10页的摘录。

SELECT time 
FROM clicktime 
WHERE `page` = '112' 
    AND `user` = 'admin' 
ORDER BY `id` ASC LIMIT 1 

,看起来像它让我的电话,是WHERE page = '112'

我怎样才能使这项工作得更快,它正在达3秒钟拉每个呼叫?

+0

您的表格大多是读取的,还是大部分更新? – desbest 2012-04-28 19:55:30

+0

它主要是读取。从未更新,只添加到。 – 2012-04-28 19:58:39

+0

Downvoter关心帮助我们避免将来的愤怒? – eggyal 2012-04-28 20:04:16

回答

2

尽管在这里有很多东西可能会更好(例如当时是bigint),但短期内对您有帮助的东西只是在您的user字段中添加索引。

+0

谢谢!给用户和页面字段添加一个索引可以加快速度! – 2012-04-28 20:23:21

+0

您应该对索引进行一些阅读,但对于这种情况,最好的索引可能是页面和用户的组合索引,但是添加更多索引时可能会注意到一个缺点(大小,插入速度)。 – Nanne 2012-04-28 20:25:42

+0

如果您确实创建了多列索引,请首先放置基数最高的索引。例如,如果页面数量超过用户数量,请先放置页面。 – Ami 2012-04-28 21:15:05