# DELETE

DELETE FROM [db.]table WHERE expr

DELETE FROMは、式exprに一致する行をテーブル[db.]tableから削除します。削除された行はすぐに削除されたとマークされ、以降のすべてのクエリから自動的にフィルタリングされます。データのクリーンアップは非同期でバックグラウンドで行われます。

例えば、次のクエリは、Title列にテキストhelloを含むhitsテーブルのすべての行を削除します。

DELETE FROM hits WHERE Title LIKE '%hello%';

MyScale(およびClickHouse)では、この操作は軽量な削除と呼ばれます。ALTER TABLE ... DELETE (opens new window)クエリと比較して、オーバーヘッドが大幅に少なくなります。デフォルトでは、軽量な削除は非同期です。ただし、mutations_sync (opens new window)を1に設定しているため、クライアントは1つのレプリカがステートメントを処理するのを待ちます。

ベクトルインデックスを持つテーブルでは、効率の悪さのためにALTER TABLE ... DELETEクエリを無効にしています。代わりに、すべてのテーブルでDELETE FROMを使用することをお勧めします。これははるかに高速です。

# データの更新方法

ClickHouseでは、ユーザーはALTER TABLE ... UPDATE (opens new window)コマンドを使用してデータを更新することができます。ただし、MyScaleではベクトルの更新シナリオにこのコマンドを使用することは推奨されません。代わりに、DELETEとINSERTを使用する方法がより良いアプローチです。

例えば、次のクエリは、id列が100と等しいtest_vectorテーブルの行を更新する方法を示しています。

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;