我有一个mysql表,可以按分钟存储有关我们用户的状态信息,但是插入已经开始需要30秒才能完成 - 我们仍然只有几十个用户进行私人测试,但是需要能够处理数千个。
使用信息:
这是我继承的表定义:
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;
我有三个改变,我是否正确地走这条路?
所以这将是我的新定义:
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;
因为我们有相当少的用户,我可以通过更改表定义来暂时解决问题,但是第一次尝试正确,所以它只发生一次。
答案 0 :(得分:1)
InnoDB
会很好,因为每个插入都会锁定整个表格MyISAM
,而InnoDB
只有一行。
您也可以考虑垂直和/或水平分区。
小心使用KEYs,其中太多可能会降低请求速度。