2012-04-28 16 views
0

私は自分のウェブサイトの各ユーザのクリック時間を記録する方法を研究しています。何百万ものMySQL行を扱っています

私は現在、これについて行く方法を考えようとすると60万以上のレコードを持っています。

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

+0

ほとんどが読まれています。決して更新されませんでした。 –

+0

将来的にあなたの怒りを避けるために、下り手が気をつけますか? – eggyal

答えて

2

ここでもっとうまくいく可能性があるものはたくさんありますが(例としてはbigintです)、短期間に役立つのは、userフィールドにインデックスを追加することだけです。

+0

ありがとうございました!ユーザーとページのフィールドにインデックスを追加すると、それがスピードアップしました! –

+0

あなたはインデックスで少し読むべきですが、この場合、最良のインデックスはおそらくページとユーザーの結合インデックスになりますが、インデントを追加するときに気づくかもしれない欠点(サイズ、挿入速度)があります。 – Nanne

+0

マルチカラムインデックスを作成する場合は、最初にカーディナリティの最も高いインデックスを配置します。たとえば、ユーザーより多くのページがある場合は、最初にページを配置します。 – Ami

関連する問題