sql >> Databasteknik >  >> RDS >> Sqlserver

Varför visas det något i min genomförandeplan?

SQL Server har tre algoritmer att välja mellan när den behöver ansluta två tabeller. The Nested-Loops-Join, Hash-Join och Sort-Merge-Join. Vilken den väljer baserar den på kostnadsuppskattningar. I det här fallet ansåg det att baserat på den information den hade tillgänglig var en Sort-Merge-Join det rätta valet.

I SQL Server-exekveringsplaner delas en Sortering-Merge upp i två operatorer, Sortera och Merge-Join, eftersom sorteringsoperationen kanske inte är nödvändig, till exempel om data redan är sorterad.

För mer information om joins, kolla in min join-serie här:http://sqlity.net/en/1146/a-join-a-day-introduction/ Artikeln om Sort-Merg-Join finns här:http://sqlity.net/en/1480/a-join-a-day-the-sort-merge-join/

För att göra din fråga snabbare skulle jag först titta på index. Du har ett gäng klustrade indexskanningar i frågan. Om du kan byta ut några av dem med sökningar kommer du troligen att bli bättre. Kontrollera också om uppskattningarna som SQL Server producerar matchar det faktiska antalet rader i en verklig exekveringsplan. Om de är långt borta gör SQL Server ofta dåliga val. Så att tillhandahålla bättre statistik kan också hjälpa dig att fråga efter prestanda.



  1. oracle plsql om inte hittas upprepa

  2. Använder en gräns på en vänster join i mysql

  3. Använda Alias ​​Column i WHERE-utlåtandet

  4. ER_HOST_NOT_PRIVILEGED - docker-behållaren kan inte ansluta till mariadb