#memsql - REPLACE不适用于列存储表

时间:2016-05-11 10:55:46

标签: memsql

REPLACE是否与#memsql中的列存储表一起使用? Memsql文档没有提到这一点,但我无法替换列存储中的记录。有没有办法在列存储中实现REPLACE?

由于 zebb

1 个答案:

答案 0 :(得分:1)

REPLACE仅对唯一键有用,否则它只等同于INSERT,而且列存储表不支持唯一键。

没有一种在列存储中有效实现它的好方法,因为列存储通常不适用于单行更新。请参阅http://docs.memsql.com/docs/columnstore

您可以实现它的一种方式(效率不高)是多语句交易。运行select以查看是否已存在匹配的行,如果是,则运行更新,否则运行insert。

E.g。说我们有

create table c(i int, a int, key using clustered columnstore(i));

我们可以做到

memsql> begin;
Query OK, 0 rows affected (0.00 sec)

memsql> select count(*) from c where i = 4;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

memsql> insert into c values (4, 4);
Query OK, 1 row affected (0.00 sec)

memsql> commit;
Query OK, 0 rows affected (0.00 sec)

在没有匹配的情况下,

memsql> begin;
Query OK, 0 rows affected (0.00 sec)

memsql> select count(*) from c where i = 4;
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (0.01 sec)

memsql> update c set a = 4 where i = 4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

memsql> commit;
Query OK, 0 rows affected (0.00 sec)

在匹配的情况下。