# DELETE
DELETE FROM [db.]table WHERE expr
DELETE FROM
从表 [db.]table
中删除与表达式 expr
匹配的行。被删除的行会立即标记为已删除,并会自动在所有后续查询中过滤掉。数据的清理会在后台异步进行。
例如,以下查询会删除 hits
表中所有 Title
列包含文本 hello
的行:
DELETE FROM hits WHERE Title LIKE '%hello%';
在 MyScale(和 ClickHouse)中,这个操作被称为轻量级删除。与 ALTER TABLE ... DELETE
(opens new window) 语句相比,它的开销要小得多。默认情况下,轻量级删除是异步的。然而,我们已经将 mutations_sync
(opens new window) 配置为 1,这意味着客户端将等待一个副本处理该语句。
请注意,由于效率问题,我们已经禁用了对具有向量索引的表的 ALTER TABLE ... DELETE
查询。我们建议在所有表上使用 DELETE FROM
,因为它速度更快。
# 如何更新数据
在 ClickHouse 中,用户可以使用 ALTER TABLE ... UPDATE
(opens new window) 命令来更新数据。然而,在 MyScale 中,不建议使用此命令来进行向量更新。更好的方法是使用删除和插入。
例如,以下查询演示了如何更新 test_vector
表中 id
列等于 100 的行。
DELETE FROM test_vector WHERE id = 100;
INSERT INTO test_vector values (100, [-0.045589335, ..., 0.026581138]);
使用 ALTER TABLE ... UPDATE
是不推荐的。
ALTER TABLE test_vector UPDATE vector = [-0.045589335, ..., 0.026581138] WHERE id = 100;