# DELETE
DELETE FROM [db.]Tabelle WHERE Ausdruck
DELETE FROM
entfernt Zeilen aus der Tabelle [db.]Tabelle
, die dem Ausdruck Ausdruck
entsprechen. Die gelöschten Zeilen werden sofort als gelöscht markiert und werden automatisch aus allen nachfolgenden Abfragen herausgefiltert. Die Bereinigung der Daten erfolgt asynchron im Hintergrund.
Zum Beispiel löscht die folgende Abfrage alle Zeilen aus der Tabelle hits
, bei denen die Spalte Title
den Text hello
enthält:
DELETE FROM hits WHERE Title LIKE '%hello%';
In MyScale (und ClickHouse) wird dieser Vorgang als leichtgewichtiger Löschvorgang bezeichnet. Er verursacht im Vergleich zur ALTER TABLE ... DELETE
(opens new window)-Abfrage deutlich weniger Overhead. Standardmäßig sind leichtgewichtige Löschvorgänge asynchron. Wir haben jedoch mutations_sync
(opens new window) auf 1 konfiguriert, was bedeutet, dass der Client auf die Verarbeitung der Anweisung durch eine Replikationsinstanz wartet.
Bitte beachten Sie, dass wir die ALTER TABLE ... DELETE
-Abfrage für Tabellen mit Vektorindizes deaktiviert haben, da sie ineffizient ist. Stattdessen empfehlen wir, DELETE FROM
für alle Tabellen zu verwenden, da dies viel schneller ist.
# Aktualisierung von Daten
In ClickHouse können Benutzer Daten mit dem Befehl ALTER TABLE ... UPDATE
(opens new window) aktualisieren. Es wird jedoch nicht empfohlen, diesen Befehl für Vektoraktualisierungsszenarien in MyScale zu verwenden. Eine bessere Vorgehensweise wäre stattdessen LÖSCHEN und EINFÜGEN.
Die folgenden Abfragen zeigen beispielsweise, wie eine Zeile in der Tabelle test_vector
aktualisiert wird, bei der die Spalte id
den Wert 100 hat.
DELETE FROM test_vector WHERE id = 100;
INSERT INTO test_vector values (100, [-0.045589335, ..., 0.026581138]);
Bitte beachten Sie, dass MyScale eine OLAP-Datenbank ist und nicht für häufige Einfüge- und Löschvorgänge optimiert ist. Für eine optimale Leistung ist es entscheidend, mehrere Datensätze in einer einzigen Anweisung einzufügen und zu löschen, anstatt jeden Datensatz einzeln zu verarbeiten. Das folgende Beispiel zeigt, wie Sie Einfügungs- und Löschvorgänge effizient in einer einzigen Anweisung ausführen können.
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]), ...;
Die Verwendung von ALTER TABLE ... UPDATE
wird nicht empfohlen.
ALTER TABLE test_vector UPDATE vector = [-0.045589335, ..., 0.026581138] WHERE id = 100;