2017-09-17 2 views
-1

Nehmen wir an, wir haben zwei Tabellen:Zeitkomplexität in SQL

A - enthält id, name

B - enthält id, Schule

Gibt es eine Zeitkomplexität Unterschied zwischen

Select A.name from A inner join B on A.id=B.id and B.school='Harvard' 

Select name from A where id=(select id from B where school='Harvard') 

Ich gehe normalerweise nach dem ersten Code, aber ich frage mich, ob der zweite Code zeitlich effizienter ist.

+0

Überprüfen Sie die Ausführungspläne für beide (ich denke, sie sollten ähnlich sein), aber der erste Ansatz ist besser lesbar – lad2025

+0

Ich bevorzuge, wählen Sie A.name aus A inneren verbinden B auf A.id = B.id wo B.school = 'Harvard' –

+1

Hier gibt es nichts, was Sie nicht selbst testen könnten – Strawberry

Antwort

1

Hängt von vielen Dingen ab, von der Menge der Daten, Indizes bis hin zur möglicherweise sogar Hardwarekonfiguration. Sie sollten den Ausführungsplan wirklich überprüfen, um dies zu überprüfen, aber nach meiner Erfahrung sollte in den meisten Fällen kein großer Unterschied in der Leistung sein.

Aber es gibt einen funktionalen Unterschied. Wenn beispielsweise ein Subjekt zweimal in Harvard gewesen wäre (mit zwei Datensätzen in B), würde die zweite Abfrage dieses Subjekt immer noch einmal zurückgeben, während die erste Abfrage ihn zweimal zurückgeben würde.

Und selbst wenn das durch eine einzigartige Einschränkung jeglicher Art auf ID oder ID/Schule abgedeckt wäre, gibt es immer noch den semantischen Unterschied. Das Konstrukt mit in schlägt vor, dass Sie nur Personen/Namen wollen, die bestimmte Kriterien erfüllen, während die Version mit join vorschlägt, dass Sie vielleicht die tatsächlichen Daten über die Schule zurückgeben möchten. Die Absicht ist in der join-Version weniger klar, was dazu führen kann, dass bei der späteren Modifikation dieses Codes Fehler eingeführt werden.