MySQL的update在执行时需要做read-modify-write:

    1. 从底层存储中读取row数据(read row)
    2. 对row数据做更改(modify row)
    3. 把更改后的数据写回底层存储(write row)

    操作路径还是比较长的,TokuDB提供了fast update语法,让"某些"场景下update更快,无需做read和modify直接write。 用法:

    1. CREATE TABLE `t1` (
    2. `id` int(11) NOT NULL,
    3. `count` bigint(20) NOT NULL,
    4. PRIMARY KEY (`id`)) ENGINE=TokuDB;

    NOAR语句:

    1. INSERT NOAR INTO t1 VALUES (1,0) ON DUPLICATE KEY UPDATE count = count + 1;

    语义是:插入一条记录,如果该记录存在(id为1),就对count的值做加法操作,不存在则做插入。 注意: fast updates的条件是比较苛刻的,必须满足:

    1. 表必须有主键,且只能有一个索引(包含主键)
    2. 主键必须为: int, char或varchar类型,被更新的列也必须为三种类型之一
    3. WHERE子句必须为单行操作
    4. 如果开启binlog,binlog_format必须为STATEMENT 看了这些苛刻的条件后,有种"臣妾做不到"的感觉了吧,可以看出TokuDB一直为细节而努力。

    原文:http://mysql.taobao.org/monthly/2014/11/09/