sql >> Database >  >> RDS >> Sqlserver

UNION ALLE prestaties IN SQL Server 2005

Zorg ervoor dat u de uitvoerings- + gegevenscaches leegmaakt tussen elke testrun.

bijv.

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

Als u eerst met UNION ALL werkt en daarna de 2 selecties afzonderlijk uitvoert, worden de gegevens al in het geheugen opgeslagen, waardoor de prestaties veel beter zijn (waardoor u de valse indruk wekt dat de daaropvolgende aanpak sneller is, terwijl dit misschien niet het geval is).

Als je een UNION hebt gebruikt, is dat misschien langzamer omdat het een DISTINCT moet toepassen, maar UNION ALL hoeft dat niet te doen, dus het zou niet anders moeten zijn.

Bijwerken:
Bekijk de uitvoeringsplannen en vergelijk ze - kijk of er een verschil is. U kunt het uitvoeringsplan bekijken door in SSMS op de knop "Actueel uitvoeringsplan opnemen" te klikken voordat u de query uitvoert

Update 2:
Op basis van de gegeven volledige CTE's, denk ik dat ik deze zou willen optimaliseren - ik denk niet dat UNION ALL het probleem is.

IMHO, het beste is om de CTE's één voor één te doorlopen en ze allemaal afzonderlijk te optimaliseren, zodat ze beter presteren wanneer je ze vervolgens allemaal in de hoofdquery combineert.

bijv. voor tDictionaryStreets, wat dacht je ervan om dit te proberen:

SELECT DISTINCT
    r.KladrItemName AS RegionName,
        a.KladrItemName AS AreaName,
        c.KladrItemName AS CityName,
        sc.KladrItemName AS SubCityName,
        s.StreetName      
FROM StreetNames s
    JOIN tFoundStreets fs ON s.StreetName = fs.KladrItemName
    LEFT JOIN tFoundRegions r ON s.RegionName = r.KladrItemName
    LEFT JOIN tFoundAreas a ON s.AreaName = a.KladrItemName
    LEFT JOIN tFoundCities c ON s.CityName = c.KladrItemName
    LEFT JOIN tFoundSubCities sc ON s.SubCityName = scc.KladrItemName

KladrItemName op elke tabel moet op zijn minst een index hebben. Probeer tDictionarySubCities ook op dezelfde manier te bewerken met joins.



  1. Waarom mysql INSERT ... ON DUPLICATE KEY UPDATE kan RBR-replicatie op een master / master-configuratie breken

  2. Beschikbare tijdsloten selecteren voor een specifieke datum

  3. Ik probeer een bestand te kopiëren, maar krijg een foutmelding

  4. Configuratie van MySQL 8