1
我有一個mysql表,它存儲有關我們的用戶在每分鐘的基礎上的狀態信息,但插入已經開始需要長達30秒才能完成 - 我們仍然在只有幾十個用戶的私人測試版,但需要能夠處理數千人。如何提高Mysql表上的性能 - 索引,集羣,PK?
使用信息:
- 插入:一個新行插入每分鐘一次,每用戶
- 更新:每隔幾分鐘最後幾排將與修正後的數據進行更新,每個用戶
- 刪除:超過6個月前刪除的條目每天刪除一次
- 選擇:每天只有約10個用戶選擇每個用戶(某些用戶每天選擇所有行,某些用戶只能獲取用戶的最近行。 )
- 我們正在使用AWS RDS,若影響任何東西(mysql的5.5.27)
這是我繼承表定義:
CREATE TABLE statusMonitor (
personId int(10) unsigned NOT NULL,
monitorDateTime datetime NOT NULL,
/*
Other columns
*/
UNIQUE KEY UQIX_statusMonitor (personId,monitorDateTime) USING BTREE,
KEY personId (personId,monitorDateTime/* other cols */)
) ENGINE = MyISAM;
我心目中有三個變化,我是否在正確的軌道上?
- InnoDB的會比MyISAM的一個高臺寫一個更好的選擇。
- 我想這樣做基於的日第一索引效率會更高
- 一個主鍵將集羣中的數據進行查詢速度更快,並插入將物理靠得更近。
因此,這將是我的新定義:
CREATE TABLE statusMonitor (
personId int(10) unsigned NOT NULL,
monitorDateTime datetime NOT NULL,
/*
Other columns
*/
PRIMARY KEY (
monitorDateTime,
personId
),
UQIX_statusMonitor (monitorDateTime,personId) USING BTREE,
KEY personId (monitorDateTime,personId/* other cols */)
) ENGINE = InnoDB;
因爲我們有相當一些用戶,我可以負擔得起通過改變表定義,打破東西了一小會兒,但更希望得到正確的結果第一次,所以它只發生一次。