# 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]);

请注意,MyScale 是一款 OLAP 数据库,并未针对频繁的插入和删除操作进行优化。为了获得最佳性能,最好在单个语句中执行多个数据插入和删除,而不是单独处理每一行数据。以下示例演示了如何在单个语句中高效地执行批量插入和删除操作:

DELETE FROM test_vector where id in (2, 3, 5, 7, 11, ...);
INSERT INTO test_vector values (2, [-0.045589335, ..., 0.026581138]), (3, [-0.051993933, ..., 0.031703997]), (5, [-0.038116932, ..., -0.116080105]), ...;

使用 ALTER TABLE ... UPDATE不推荐的。

ALTER TABLE test_vector UPDATE vector = [-0.045589335, ..., 0.026581138] WHERE id = 100;
Last Updated: Fri Nov 01 2024 09:02:06 GMT+0000