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;
因为我们有相当一些用户,我可以负担得起通过改变表定义,打破东西了一小会儿,但更希望得到正确的结果第一次,所以它只发生一次。