/ / MySQL-Abfrage mit DELETE, wenn ANY zu lange ausgeführt wird - mysql

MySQL-Abfrage mit DELETE wo ANY zu lange läuft - mysql

Hier ist meine Frage:

DELETE FROM my_table WHERE name = ANY (
SELECT name FROM (
SELECT sd1.name
FROM my_table sd1 JOIN my_table sd2
ON sd2.name > sd1.name
AND sd2.name & sd1.name = sd1.name
AND sd1.number >= sd2.number) AS stmp
);

Name ist Primärschlüssel vom Typ BIGINT.

Die Ausführung dauert lange, auch wenn my_table nicht so viele Zeilen enthält. Irgendwelche Ideen, wie es schneller laufen kann.

Antworten:

1 für die Antwort № 1

Sie suchen nach sd1.names, wo ein anderer Datensatz mit bestimmten Kriterien vorhanden ist. Dann löschen Sie alle Datensätze mit den gefundenen Namen.

Ist das nicht einfach: Datensätze löschen, für die ein anderer Datensatz mit bestimmten Kriterien existiert?

DELETE FROM my_table
WHERE EXISTS
(
SELECT *
FROM
(
SELECT *
FROM my_table sd2
WHERE sd2.name > my_table.name
AND sd2.name & my_table.name = my_table.name
AND my_table.number >= sd2.number
) dummy
);

(AKTUALISIERT: MySQL kann nicht auf dieselbe Tabelle in zugreifen UPDATE oder DELETE und man muss die Unterabfrage einwickeln, damit die Tabelle eine Ebene tiefer versteckt wird. Sieht absolut sinnlos aus, soll aber dieses Problem lösen. Hoffe es tut.)

Das ist weniger kompliziert und daher vielleicht schneller EXISTS muss nur einen Treffer pro Hauptsatz finden und kann dort aufhören, wohingegen ein Join nach allen Spielen sucht


0 für die Antwort № 2

Anscheinend können Sie DELETE mit INNER JOIN pare http://www.mysqltutorial.org/mysql-delete-join/ Es dauert immer noch eine Weile, wenn JOIN groß ist.