Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie die übergeordnete Zeile nur aus, wenn sie keine untergeordneten Elemente hat

SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL

du kannst das. der äußere Join sollte ein wenig Performance bringen, aber nicht viel.

neue Datenbanksysteme werden Ihre Abfrage wahrscheinlich sowieso optimieren, so dass es keinen Unterschied gibt.

der richtige Weg hier ist Caching! Versuchen Sie, wenn möglich, den Abfrage-Cache und das Caching auf Anwendungsebene.

Natürlich brauchen Sie die richtigen Indizes.

und mit richtig meine ich beide Tabellen und vorzugsweise einen Hash-Index, da er im Vergleich zu jedem logarithmischen Baum eine statische Suchzeit hat

Versuchen Sie, ein Erklären vor die Abfrage zu setzen, um zu sehen, was dies wirklich verlangsamt.

Wenn Sie dies wirklich brauchen, um schnell zu sein, können Sie Ihre Datenstruktur neu fabrizieren.

Du könntest evtl. einen Trigger erstellen, um in Tabelle A ein Flag zu markieren, ob ein entsprechender Eintrag in Tabelle vorhanden ist. natürlich diese ID-Datenredundanz, aber manchmal lohnt es sich. Betrachten Sie es einfach als Caching.

Ein letzter Gedanke:Sie könnten SELECT id FROM A WHERE id NOT IN (SELECT id FROM B) versuchen es kann etwas schneller sein, weil kein tatsächliches Verbinden notwendig ist, es kann jedoch auch langsamer sein, weil die Suche in der Menge von be ein vollständiger Scan sein wird. Ich bin mir nicht sicher, wie das verarbeitet wird, aber es könnte einen Versuch wert sein.