MySQL的update在执行时需要做read-modify-write:
- 从底层存储中读取row数据(read row)
- 对row数据做更改(modify row)
- 把更改后的数据写回底层存储(write row)
操作路径还是比较长的,TokuDB提供了fast update语法,让"某些"场景下update更快,无需做read和modify直接write。 用法:
CREATE TABLE `t1` (
`id` int(11) NOT NULL,
`count` bigint(20) NOT NULL,
PRIMARY KEY (`id`)) ENGINE=TokuDB;
NOAR语句:
INSERT NOAR INTO t1 VALUES (1,0) ON DUPLICATE KEY UPDATE count = count + 1;
语义是:插入一条记录,如果该记录存在(id为1),就对count的值做加法操作,不存在则做插入。 注意: fast updates的条件是比较苛刻的,必须满足:
- 表必须有主键,且只能有一个索引(包含主键)
- 主键必须为: int, char或varchar类型,被更新的列也必须为三种类型之一
- WHERE子句必须为单行操作
- 如果开启binlog,binlog_format必须为STATEMENT 看了这些苛刻的条件后,有种"臣妾做不到"的感觉了吧,可以看出TokuDB一直为细节而努力。
当前内容版权归 阿里云RDS-数据库内核组 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 阿里云RDS-数据库内核组 .