所以基本上我有一个包含大约 7 亿行的表,并且每天不断更新大约 200k-300k 行,每个月底,我都会清除超过 3 个月的数据。
CREATE TABLE TESTRECORD (
TIMEADDED timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
SERIAL varchar(8) NOT NULL,
ENDTIME varchar(14) NOT NULL,
MODEL varchar(2) NOT NULL,
PROCESS int(4) NOT NULL,
PF varchar(4) NOT NULL,
COMID varchar(6) NOT NULL,
COMTP varchar(3) NOT NULL,
TRIAL varchar(4) NOT NULL,
TEST varchar(8) NOT NULL,
SECTION int(2) NOT NULL,
DATA_0 float NOT NULL,
DATA_1 float NOT NULL,
DATA_2 float NOT NULL,
DATA_3 float NOT NULL,
DATA_4 float NOT NULL,
DATA_5 float NOT NULL,
PRIMARY KEY (SN,ENDTIME,SECTION),
UNIQUE KEY BASESN (SN,ENDTIME,MODEL,PROCESS,PF,COMID,TRIAL,TEST,SECTION),
KEY COMID (COMID),
KEY TRIAL (TRIAL),
KEY PF (PF),
KEY TEST (TEST)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
唯一键定义了将在 select 语句中使用的参数。由于该表的基本功能是动态数据分析,所以没有具体的顺序,where子句中会发生什么,使用多少个,可能会有一些随机分组由一两个cols也来自唯一键。因此,几乎不可能索引所有可能的组合以确保对任何给定选择的快速操作。
据我了解,mysql 根据它们在模式中列出的顺序使用索引,所以在我的情况下,如果我在 select 语句中使用 SN、ENDTIME 和 PF,则只会使用唯一键中的前 2 列。有没有什么有效的方法可以像每列 1 个索引或查询技术那样分解索引以加快速度,或者至少在 where 子句中的不同列组合中实现大致相同的性能?
提前非常感谢~!!!