sql >> Databáze >  >> RDS >> Sqlserver

Výkon SQL na LEFT OUTER JOIN vs. NEEXISTUJE

Joeův odkaz je dobrým výchozím bodem. Quassnoi to také pokrývá.

Obecně pokud jsou vaše pole správně indexována, NEBO pokud očekáváte odfiltrování více záznamů (tj. mají mnoho řádků EXIST v dílčím dotazu) NOT EXISTS bude fungovat lépe.

EXIST a NOT EXISTS oba zkrat – jakmile záznam splňuje kritéria, je buď zahrnut nebo odfiltrován a optimalizátor přejde na další záznam.

LEFT JOIN se připojí ke VŠECHNYM ZÁZNAMŮM bez ohledu na to, zda se shodují či nikoli, pak odfiltrujte všechny neodpovídající záznamy. Pokud jsou vaše stoly velké a/nebo máte více JOIN kritérií, může to být velmi náročné na zdroje.

Normálně se snažím použít NOT EXISTS a EXIST kde je to možné. Pro SQL Server, IN a NOT IN jsou sémanticky ekvivalentní a jejich psaní může být jednodušší. Toto jsou jedni z mála operátorů, které na SQL Serveru najdete a u kterých je zaručeno, že se zkratují.



  1. Filtrování dat pomocí sady řádků JDBC

  2. Udělení přístupu uživatele msdb k profilu pošty databáze v SQL Server (T-SQL)

  3. Funkce vrací více sloupců jako jeden sloupec namísto více sloupců

  4. Schéma zpětného inženýrství (orákula) k ERD