sql >> Database >  >> RDS >> Sqlserver

Zullen ANSI JOIN-query's anders presteren dan niet-ANSI JOIN-query's?

De twee query's zijn hetzelfde, behalve dat de tweede de ANSI-92 SQL-syntaxis is en de eerste de oudere SQL-syntaxis is waarin de join-clausule niet is opgenomen. Ze zouden precies hetzelfde interne queryplan moeten produceren, hoewel u dit misschien wilt controleren.

U moet om verschillende redenen de ANSI-92-syntaxis gebruiken

  • Het gebruik van de JOIN-clausule scheidt de relatielogica van de filterlogica (de WHERE) en is dus schoner en gemakkelijker te begrijpen.
  • Het maakt niet uit met deze specifieke query, maar er zijn een paar omstandigheden waarin de oudere outer join-syntaxis (met behulp van + ) dubbelzinnig is en de queryresultaten daarom implementatie-afhankelijk zijn - of de query kan helemaal niet worden opgelost. Deze komen niet voor bij ANSI-92
  • Het is een goede gewoonte, aangezien de meeste ontwikkelaars en dba's tegenwoordig ANSI-92 zullen gebruiken en u de standaard moet volgen. Alle moderne zoekhulpmiddelen zullen ANSI-92 genereren.
  • Zoals aangegeven door @gbn, heeft het de neiging om onbedoelde kruisverbindingen te vermijden.

Zelf heb ik enige tijd weerstand geboden aan ANSI-92 omdat er een klein conceptueel voordeel is aan de oude syntaxis, omdat het gemakkelijker is om de SQL voor te stellen als een massale cartesiaanse samenvoeging van alle gebruikte tabellen, gevolgd door een filterbewerking - een mentale techniek die nuttig kan zijn om te begrijpen wat een SQL-query doet. Ik besloot echter een paar jaar geleden dat ik met mijn tijd mee moest gaan en na een relatief korte aanpassingsperiode heb ik daar nu een sterke voorkeur voor - voornamelijk vanwege de eerste reden die hierboven is gegeven. De enige plaats waar men moet afwijken van de ANSI-92-syntaxis, of liever de optie niet moet gebruiken, is bij natuurlijke joins die impliciet gevaarlijk zijn.



  1. Is er een prestatiehit met behulp van decimale gegevenstypen (MySQL / Postgres)

  2. Verzamelmethode:Trimprocedure in Oracle Database

  3. De uitvoering van een instructie in PostgreSQL pauzeren

  4. Standaard rijvolgorde voor selectiequery in oracle