大型MySQL表更新速度慢

大型MySQL表更新速度慢,mysql,performance,scalability,sql-update,Mysql,Performance,Scalability,Sql Update,嗨,这是我的桌子结构 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` lo

嗨,这是我的桌子结构

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默认字符集=utf8 COLLATE=utf8\U unicode\U ci自动增量=1947722

我有大约200万行,所以当我在这里更新R_状态时,它似乎花费了太长的时间(R_状态为1,2,16或24)。
请建议如何优化。

如果R\U状态始终为整数,则将其设置为整数。 此外,我会尝试将此表转换为固定的行宽度格式(无varchars/text)


另外,在R_smppid上建立索引,否则它将在每次更新时进行全表扫描。

如果R_状态始终为整数,则将其设置为整数。 此外,我会尝试将此表转换为固定的行宽度格式(无varchars/text)


此外,在R_SMPID上建立索引,否则每次更新时都会进行全表扫描。

正如@Barsmondster所建议的,将
R_状态
转换为整数(
TINYINT
如果值仅为
1,2,16,24
),并在
R_SMPID
上创建
索引。另外,如果
R\u smppid
是固定宽度,则将字段类型更改为
char(40)
或内容的长度,或者如果可以将其转换为整数,则更好。

如@BarsMonster所建议,将
R\u status
转换为整数(
TINYINT
如果值仅为
1,2,16,24
),并在
R\u smppid
上创建
索引。另外,如果
R\u smppid
是固定宽度,则将字段类型更改为
char(40)
或任何内容长度,或者如果可以将其转换为整数,则更好。

是否仅根据
WHERE
子句中的
R\u id
进行更新?还是其他专栏?您可以发布一个示例
UPDATE
查询吗?示例更新查询将是UPDATE sms_report set R_status=1,其中R_smpid=738sbdasdbajsdbdfbfbks782 | 9898773122您是否仅基于
where
子句中的
R_id
进行更新?还是其他专栏?您可以发布一个示例
UPDATE
query吗?示例更新查询将是UPDATE sms_report set R_status=1,其中R_smppid=738sbdasdbajsdbdfbfbks782 | 9898773122当您创建索引时,数据库引擎缓存一个字段的版本,以便在请求时轻松快速地查找,因此当您执行
更新时。。如果indexed_field=value
下一次,数据库会更快地找到该行,并更新它,请看这里:当您创建索引时,数据库引擎会缓存已排序字段的一个版本,以便在请求时轻松快速地查找,所以当您执行
更新时。。如果下一次索引的_field=value
,数据库会更快地找到该行,并更新它,请查看以下内容: