2012-04-28 4 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 ; 

Мне нужно будет выполнить десять из этих поисков на странице. В моем блоге показан фрагмент из десяти страниц одновременно.

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

вызов, который выглядит, как он получает меня, является WHERE page = '112'

Как я могу сделать эту работу быстрее, она занимает до 3 секунд, чтобы тянуть каждый вызов?

+0

Ваша таблица в основном читается или в основном обновляется? – desbest

+0

В основном прочитано. Никогда не обновляется, только добавляется. –

+0

Помощник Downvoter, чтобы помочь всем нам избежать вашего гнева в будущем? – eggyal

ответ

2

Хотя есть несколько вещей, которые могут быть лучше здесь (например, время, например bigint), то, что поможет вам в краткосрочной перспективе, - это просто добавить индекс в поле user.

+0

Спасибо! Добавление индекса в поле пользователя и страницы ускорило его! –

+0

Вы должны немного почитать индексы, но для этого случая лучший индекс, вероятно, будет комбинированным индексом для страницы и пользователя, но есть недостаток (размер, скорость вставки), который вы могли бы заметить при добавлении большего количества индексов. – Nanne

+0

Если вы создаете индекс с несколькими столбцами, сначала поставьте тот, который имеет наивысшую мощность. Например, если страниц больше, чем пользователей, сначала поставьте страницы. – Ami