2012-04-28 83 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