嗨,这是我的表结构
CREATE TABLE IF NOT EXISTS `sms_report` (
`R_id` int(11) NOT NULL auto_increment,
`R_uid` int(11) NOT NULL,
`R_smppid` varchar(100) collate utf8_unicode_ci NOT NULL,
`R_from` varchar(10) collate utf8_unicode_ci NOT NULL,
`R_status` longtext collate utf8_unicode_ci NOT NULL,
`R_message` text collate utf8_unicode_ci NOT NULL,
`R_numbers` longtext collate utf8_unicode_ci NOT NULL,
`R_timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`R_timedate` varchar(40) collate utf8_unicode_ci NOT NULL,
`R_show` int(11) NOT NULL default '1',
`oldformat` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`R_id`)
)ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci AUTO_INCREMENT = 1947722;
我有大约200万行所以当我在这里对R_status进行更新时,它似乎需要太长时间(R_status是1,2,16或24)。 请建议如何优化。
答案 0 :(得分:3)
如果R_status总是整数,则将其设为整数。 另外,我会尝试将此表转换为固定行宽格式(无varchars /文本)
另外,在R_smppid上创建索引,而不是在每次更新时都进行全表扫描。
答案 1 :(得分:0)
正如@BarsMonster建议的那样,将R_status
转换为整数(TINYINT
,如果值仅为1,2,16,24
),并在INDEX
上创建R_smppid
。此外,如果R_smppid
是固定宽度,请将字段类型更改为char(40)
或内容的长度,或者如果它可以转换为整数,那就更好了。