sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor er en UDF så meget langsommere end en underforespørgsel?

UDF'en er en sort boks til forespørgselsoptimeringsværktøjet, så det udføres for hver række. Du laver en række-for-række-markør. For hver række i et aktiv skal du slå et id op tre gange i en anden tabel. Dette sker, når du bruger skalære UDF'er eller UDF'er med flere sætninger (In-line UDF'er er simpelthen makroer, der udvides til den ydre forespørgsel)

En af mange artikler om problemet er "Skalære funktioner, inlining og ydeevne:En underholdende titel til et kedeligt indlæg".

Underforespørgslerne kan optimeres til at korrelere og undgå række-for-række-operationer.

Hvad du virkelig ønsker er dette:

SELECT
   uc.id AS creator,
   uu.id AS updater,
   uo.id AS owner,
   a.[name]
FROM
    asset a
    JOIN
    user uc ON uc.user_pk = a.created_by
    JOIN
    user uu ON uu.user_pk = a.updated_by
    JOIN
    user uo ON uo.user_pk = a.owned_by

Opdatering feb 2019

SQL Server 2019 begynder at løse dette problem.



  1. Hvorfor understøtter MySQL ikke millisekund / mikrosekund præcision?

  2. Hvad er standardnavnet i MySQL?

  3. Åbn automatisk SQLite-forespørgselsresultater i en teksteditor

  4. Fejl ved brug undtagen i en forespørgsel