sql >> Database >  >> RDS >> Mysql

Selecteer bovenliggende rij alleen als deze geen onderliggende rij heeft

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

je kan dit doen. de outer join zou een beetje prestatie moeten opleveren, maar niet veel.

nieuwe databasesystemen zullen uw zoekopdracht waarschijnlijk toch optimaliseren, zodat er geen verschil zal zijn.

de juiste manier hier is caching! probeer indien mogelijk de query-cacher en caching op applicatieniveau.

natuurlijk heb je goede indexen nodig.

en met de juiste bedoel ik op beide tabellen en bij voorkeur een hash-index, omdat deze statische opzoektijd heeft in vergelijking met elke boom met logaritmische

Probeer een uitleg voor de vraag te plaatsen om te zien wat dit echt vertraagt.

als je dit echt nodig hebt om snel te zijn, kun je je gegevensstructuur opnieuw factureren.

je zou eventueel een trigger kunnen maken om een ​​vlag in tabel A te markeren of er een corresponderend item in tabel be is. natuurlijk deze id-gegevensredundantie, maar soms is het de moeite waard. beschouw het maar als caching.

een laatste gedachte:je zou kunnen proberen SELECT id FROM A WHERE id NOT IN (SELECT id FROM B) het kan een beetje sneller zijn omdat er geen daadwerkelijke samenvoeging nodig is, maar het kan ook langzamer zijn omdat het opzoeken in de set van be een volledige scan zal zijn. Ik weet niet precies hoe dit zal worden verwerkt, maar het kan het proberen waard zijn.



  1. Hoe datumgegevens in MySQL te laden bij gebruik van LOAD DATA

  2. Wijzig het scheidingsteken in een komma bij het e-mailen van queryresultaten in SQL Server (T-SQL)

  3. Hoe kan ik een .sql-bestand importeren in mijn Heroku postgres-database?

  4. XMLTABLE in PostgreSQL