我發現自己陷入了一種困境。我已經使用了頁面表擊中近1.05億行跟蹤它看起來像這樣。(!):MySQL:擁有100多萬行的索引表
CREATE TABLE `media_hits` (
`id` int(10) unsigned NOT NULL auto_increment,
`media_code` char(7) NOT NULL,
`day` date NOT NULL,
`hits` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `media_code` (`media_code`,`day`)
) ENGINE=InnoDB;
,你可以想像運行任何在該表上的查詢需要很長的時間。典型的查詢如下:
SELECT DISTINCT(`media_code`), COUNT(*) AS c
FROM `media_hits`
WHERE `day` >= DATE_SUB(NOW(), INTERVAL 1 DAY)
GROUP BY(`media_code`)
ORDER BY c DESC
LIMIT 200;
該查詢需要永久。並在查詢說明給我這個:
id: 1
select_type: SIMPLE
table: media_hits
type: index
possible_keys: NULL
key: media_code
key_len: 10
ref: NULL
rows: 104773158
Extra: Using where; Using index; Using temporary; Using filesort
這只是非常可怕的。所以我的問題是:我能做些什麼呢?試圖添加適當的索引是不可能的。 ALTER TABLE查詢可能需要一個星期才能運行。我嘗試刪除6個月以上的行,但24小時後,該查詢仍在運行。
我需要解決這個問題。我唯一想到的就是創建一個具有適當索引的新表,並開始在該表中記錄點擊。在後臺,我可以有一個腳本緩慢地從舊的media_hits表中插入記錄。任何人都可以提供關於如何索引此表的建議,並且可能提供有關應該索引哪些列的提示?
我同意需要一個新的系統,並且聚合表將非常有幫助。我想真正的問題是以不需要幾周的方式導入舊數據。哈哈如果這是需要的,那麼這就是需要的,但如果有一個更簡單的方法,它會很好。 – mellowsoon 2010-10-08 17:53:49