Frågetips (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL-databas i Microsoft Fabric
Frågetips anger att angivna tips används i omfånget för en fråga. De påverkar alla operatorer i -instruktionen. Om UNION
är involverad i huvudfrågan kan endast den sista frågan som involverar en UNION
-åtgärd ha OPTION
-satsen. Frågetips anges som en del av OPTION-satsen. Fel 8622 uppstår om en eller flera frågetips gör att frågeoptimeraren inte genererar en giltig plan.
Försiktighet
Eftersom SQL Server Query Optimizer vanligtvis väljer den bästa körningsplanen för en fråga rekommenderar vi att du bara använder tips som en sista utväg för erfarna utvecklare och databasadministratörer.
gäller för:
Transact-SQL syntaxkonventioner
Syntax
<query_hint> ::=
{ { HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| DISABLE_OPTIMIZED_PLAN_FORCING
| EXPAND VIEWS
| FAST <integer_value>
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| { FORCE | DISABLE } SCALEOUTEXECUTION
| IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
| KEEP PLAN
| KEEPFIXED PLAN
| MAX_GRANT_PERCENT = <numeric_value>
| MIN_GRANT_PERCENT = <numeric_value>
| MAXDOP <integer_value>
| MAXRECURSION <integer_value>
| NO_PERFORMANCE_SPOOL
| OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ...n ] )
| OPTIMIZE FOR UNKNOWN
| PARAMETERIZATION { SIMPLE | FORCED }
| QUERYTRACEON <integer_value>
| RECOMPILE
| ROBUST PLAN
| USE HINT ( <use_hint_name> [ , ...n ] )
| USE PLAN N'<xml_plan>'
| TABLE HINT ( <exposed_object_name> [ , <table_hint> [ [ , ] ...n ] ] )
| FOR TIMESTAMP AS OF '<point_in_time>'
}
<table_hint> ::=
{ NOEXPAND [ , INDEX ( <index_value> [ , ...n ] ) | INDEX = ( <index_value> ) ]
| INDEX ( <index_value> [ , ...n ] ) | INDEX = ( <index_value> )
| FORCESEEK [ ( <index_value> ( <index_column_name> [ , ... ] ) ) ]
| FORCESCAN
| HOLDLOCK
| NOLOCK
| NOWAIT
| PAGLOCK
| READCOMMITTED
| READCOMMITTEDLOCK
| READPAST
| READUNCOMMITTED
| REPEATABLEREAD
| ROWLOCK
| SERIALIZABLE
| SNAPSHOT
| SPATIAL_WINDOW_MAX_CELLS = <integer_value>
| TABLOCK
| TABLOCKX
| UPDLOCK
| XLOCK
}
<use_hint_name> ::=
{ 'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
| 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
| 'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES'
| 'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES'
| 'DISABLE_BATCH_MODE_ADAPTIVE_JOINS'
| 'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK'
| 'DISABLE_DEFERRED_COMPILATION_TV'
| 'DISABLE_INTERLEAVED_EXECUTION_TVF'
| 'DISABLE_OPTIMIZED_NESTED_LOOP'
| 'DISABLE_OPTIMIZER_ROWGOAL'
| 'DISABLE_PARAMETER_SNIFFING'
| 'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK'
| 'DISABLE_TSQL_SCALAR_UDF_INLINING'
| 'DISALLOW_BATCH_MODE'
| 'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS'
| 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'
| 'FORCE_DEFAULT_CARDINALITY_ESTIMATION'
| 'FORCE_LEGACY_CARDINALITY_ESTIMATION'
| 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
| 'QUERY_PLAN_PROFILE'
}
Argumenten
{ HASH | ORDER } GRUPP
Anger att sammansättningar som frågans GROUP BY
- eller DISTINCT
-sats beskriver ska använda hashning eller ordning.
- I allmänhet kan en hash-baserad algoritm förbättra prestandan för frågor som omfattar stora eller komplexa grupperingsuppsättningar.
- I allmänhet kan en sorteringsbaserad algoritm förbättra prestandan för frågor som omfattar små eller enkla grupperingsuppsättningar.
{ MERGE | HASH | CONCAT } UNION
Anger att alla UNION
åtgärder körs genom sammanslagning, hashning eller sammanfogning av UNION
uppsättningar. Om fler än en UNION
tips anges väljer Frågeoptimeraren den billigaste strategin från de angivna tipsen.
- I allmänhet kan en sammanslagningsbaserad algoritmåtgärd förbättra prestandan för frågor som omfattar sorterade indata.
- I allmänhet kan en hash-baserad algoritm förbättra prestandan för frågor som omfattar osorterade eller stora indata.
- I allmänhet kan en sammanlänkningsbaserad algoritm förbättra prestandan för frågor som omfattar distinkta eller små indata.
{ LOOP | MERGE | HASH } JOIN
Anger att alla kopplingsåtgärder utförs av LOOP JOIN
, MERGE JOIN
eller HASH JOIN
i hela frågan. Om du anger fler än en kopplingstips väljer optimeraren den billigaste kopplingsstrategin från de tillåtna.
Om du anger ett kopplingstips i samma frågas FROM
-sats för ett specifikt tabellpar har det här kopplingstipset företräde i kopplingen av de två tabellerna. Frågetipsen måste dock fortfarande respekteras. Kopplingstipset för tabellparet kan bara begränsa valet av tillåtna kopplingsmetoder i frågetipset. Mer information finns i Join-tips.
DISABLE_OPTIMIZED_PLAN_FORCING
gäller för: SQL Server (från och med SQL Server 2022 (16.x))
Inaktiverar optimerad plan som tvingar för en fråga.
Optimerad plan framtvingning minskar kompileringskostnaderna för upprepade framtvingade frågor. När frågekörningsplanen har genererats lagras specifika kompileringssteg för återanvändning som ett optimeringsreprisskript. Ett optimeringsreprisskript lagras som en del av den komprimerade showplan-XML:en i Query Storei ett dolt OptimizationReplay
-attribut.
EXPANDERA VYER
Anger att de indexerade vyerna expanderas. Anger också att Frågeoptimeraren inte anser att någon indexerad vy ersätter någon frågedel. En vy expanderas när vydefinitionen ersätter visningsnamnet i frågetexten.
Det här frågetipset tillåter praktiskt taget inte direkt användning av indexerade vyer och index på indexerade vyer i frågeplanen.
Anmärkning
Den indexerade vyn förblir komprimerad om det finns en direkt referens till vyn i frågans SELECT
del. Vyn förblir också komprimerad om du anger WITH (NOEXPAND)
eller WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) )
. Mer information om frågetipset NOEXPAND
finns i Using NOEXPAND.
Tipset påverkar bara vyerna i instruktionens SELECT
del, inklusive vyerna i INSERT
, UPDATE
, MERGE
och DELETE
-instruktioner.
FAST-integer_value
Anger att frågan är optimerad för snabb hämtning av det första integer_value antalet rader. Det här resultatet är ett heltal som inte är negativt. När det första integer_value antalet rader returneras fortsätter frågan att köras och genererar sin fullständiga resultatuppsättning.
FORCE ORDER
Anger att kopplingsordningen som anges av frågesyntaxen bevaras under frågeoptimeringen. Att använda FORCE ORDER
påverkar inte det möjliga rollåtervändningsbeteendet för frågeoptimeraren.
FORCE ORDER
bevarar kopplingsordningen som anges i frågan, vilket kan förbättra prestanda eller konsekvens för frågor som omfattar komplexa kopplingsvillkor eller tips.
Anmärkning
I en MERGE
-instruktion används källtabellen före måltabellen som standardanslutningsordning, såvida inte WHEN SOURCE NOT MATCHED
-satsen anges. Om du anger FORCE ORDER
bevaras det här standardbeteendet.
{ FORCE | INAKTIVERA } EXTERNALPUSHDOWN
Framtvinga eller inaktivera pushdown för beräkningen av kvalificerande uttryck i Hadoop. Gäller endast för frågor som använder PolyBase. Push-överför inte till Azure Storage.
{ FORCE | INAKTIVERA } SCALEOUTEXECUTION
Framtvinga eller inaktivera utskalningskörning av PolyBase-frågor som använder externa tabeller i SQL Server 2019 Big Data Clusters. Det här tipset respekteras bara av en fråga med hjälp av huvudinstansen av ett SQL Big Data-kluster. Utskalningen sker över beräkningspoolen i stordataklustret.
BEHÅLL PLAN
Ändrar tröskelvärdena för omkompilering för temporära tabeller och gör dem identiska med tröskelvärdena för permanenta tabeller. Det uppskattade omkompileringströskelvärdet startar en automatisk omkompilering för frågan när det uppskattade antalet indexerade kolumnändringar görs i en tabell genom att köra någon av följande instruktioner:
UPDATE
DELETE
MERGE
INSERT
Om du anger KEEP PLAN
ser du till att en fråga inte kompileras om lika ofta när det finns flera uppdateringar i en tabell.
KEEPFIXED PLAN
Tvingar frågeoptimeraren att inte kompilera om en fråga på grund av ändringar i statistiken. Om du anger KEEPFIXED PLAN
ser du till att en fråga endast kompilerar om schemat för de underliggande tabellerna ändras eller om sp_recompile
körs mot dessa tabeller.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
gäller för: SQL Server (från och med SQL Server 2012 (11.x)).
Förhindrar att frågan använder ett icke-illustrerat minnesoptimerad kolumnlagringsindex. Om frågan innehåller frågetipset för att undvika användning av columnstore-indexet och ett indextips för att använda ett columnstore-index är tipsen i konflikt och frågan returnerar ett fel.
MAX_GRANT_PERCENT = <numeric_value>
gäller för: SQL Server (från och med SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 och Azure SQL Database.
Den maximala minnesanvändningsstorleken i PERCENT
för konfigurerad minnesgräns. Frågan kommer garanterat inte att överskrida den här gränsen om frågan körs i en användardefinierad resurspool. I det här fallet, om frågan inte har det minsta minne som krävs, genererar systemet ett fel. Om en fråga körs i systempoolen (standard) får den minst det minne som krävs för att köras. Den faktiska gränsen kan vara lägre om inställningen Resource Governor är lägre än det värde som anges i det här tipset. Giltiga värden är mellan 0.0 och 100.0.
Tipset om minnesbidrag är inte tillgängligt för att skapa index eller återskapa index.
MIN_GRANT_PERCENT = <numeric_value>
gäller för: SQL Server (från och med SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 och Azure SQL Database.
Minsta storlek på minnesbidrag i PERCENT
för konfigurerad minnesgräns. Frågan kommer garanterat att hämta MAX(required memory, min grant)
eftersom det krävs minst minne för att starta en fråga. Giltiga värden är mellan 0.0 och 100.0.
Alternativet min_grant_percent minnesbidrag åsidosätter alternativet sp_configure
(minsta minne per fråga (KB)) oavsett storlek. Tipset om minnesbidrag är inte tillgängligt för att skapa index eller återskapa index.
MAXDOP-<integer_value>
gäller för: SQL Server (från och med SQL Server 2008 (10.0.x)) och Azure SQL Database.
Åsidosätter maximal grad av parallellitet konfigurationsalternativet för sp_configure
. Åsidosätter även Resource Governor för frågan som anger det här alternativet. Frågetipset MAXDOP
kan överskrida värdet som konfigurerats med sp_configure
. Om MAXDOP
överskrider det värde som konfigurerats med Resource Governor använder databasmotorn värdet Resource Governor MAXDOP
, som beskrivs i ALTER WORKLOAD GROUP. Alla semantiska regler som används med maximal grad av parallellitet konfigurationsalternativ gäller när du använder MAXDOP
frågetips. Mer information finns i Konfigurera den maximala graden av parallellitet serverkonfigurationsalternativ.
Varning
Om MAXDOP
är inställt på noll väljer servern den maximala graden av parallellitet.
MAXRECURSION <integer_value>
Anger det maximala antalet rekursioner som tillåts för den här frågan. talet är ett positivt heltal mellan 0 och 32 767. När 0 har angetts tillämpas ingen gräns. Om det här alternativet inte anges är standardgränsen för servern 100.
När det angivna eller standardnumret för MAXRECURSION
gränsen nås under frågekörningen avslutas frågan och ett fel returneras.
På grund av det här felet återställs alla effekter av -instruktionen. Om -instruktionen är en SELECT
-instruktion kan partiella resultat eller inga resultat returneras. Eventuella partiella resultat som returneras kanske inte innehåller alla rader på rekursionsnivåer utöver den angivna maximala rekursionsnivån.
Mer information finns i WITH common_table_expression.
NO_PERFORMANCE_SPOOL
gäller för: SQL Server (från och med SQL Server 2016 (13.x)) och Azure SQL Database.
Förhindrar att en spooloperator läggs till i frågeplaner (förutom de planer då spool krävs för att garantera giltig uppdateringssemantik). Spooloperatorn kan minska prestanda i vissa scenarier. Spoolen använder till exempel tempdb
, och tempdb
konkurrens kan uppstå om det finns många samtidiga frågor som körs med spoolåtgärderna.
OPTIMERA FÖR ( @variable_name { OKÄND | = <literal_constant> } [ , ... n ] )
Instruerar frågeoptimeraren att använda ett visst värde för en lokal variabel när frågan kompileras och optimeras. Värdet används endast under frågeoptimering och inte under frågekörningen.
@variable_name
Namnet på en lokal variabel som används i en fråga, till vilken ett värde kan tilldelas för användning med
OPTIMIZE FOR
frågetips.UNKNOWN
Anger att frågeoptimeraren använder statistiska data i stället för det ursprungliga värdet för att fastställa värdet för en lokal variabel under frågeoptimeringen.
literal_constant
Ett literalkonstantvärde som ska tilldelas @variable_name för användning med
OPTIMIZE FOR
frågetips. literal_constant används endast under frågeoptimering och inte som värdet för @variable_name under frågekörningen. literal_constant kan vara av valfri SQL Server-systemdatatyp som kan uttryckas som en literalkonstant. Datatypen för literal_constant måste implicit konverteras till den datatyp som @variable_name referenser i frågan.
OPTIMERA FÖR kan motverka optimerarens standardbeteende för parameteridentifiering. Använd även OPTIMIZE FOR
när du skapar planguider. Mer information finns i Kompilera om en lagrad procedur.
OPTIMERA FÖR OKÄNT
Instruerar frågeoptimeraren att använda den genomsnittliga selektiviteten för predikatet för alla kolumnvärden, i stället för att använda körningsparametervärdet när frågan kompileras och optimeras.
Om du använder OPTIMIZE FOR @variable_name = <literal_constant>
och OPTIMIZE FOR UNKNOWN
i samma frågetips använder frågeoptimeraren den literal_constant som angetts för ett specifikt värde. Frågeoptimeraren använder UNKNOWN för resten av variabelvärdena. Värdena används endast under frågeoptimering och inte under frågekörningen.
PARAMETERIZATION { SIMPLE | FORCED }
Anger de parameteriseringsregler som SQL Server Query Optimizer tillämpar på frågan när den kompileras.
Viktigt!
Det PARAMETERIZATION
frågetipset kan bara anges i en planguide för att åsidosätta den aktuella inställningen för alternativet PARAMETERIZATION
databas SET
. Det kan inte anges direkt i en fråga.
Mer information finns i Ange beteende för frågeparameterisering med hjälp av planguider.
SIMPLE
instruerar frågeoptimeraren att försöka med enkel parameterisering.
FORCED
instruerar frågeoptimeraren att försöka tvingad parameterisering. Mer information finns i tvingad parameterisering i arkitekturguiden för frågebearbetningoch enkel parameterisering i arkitekturguiden för frågebearbetning.
QUERYTRACEON <integer_value>
Med det här alternativet kan du aktivera en plan som påverkar spårningsflaggan endast under kompilering med en fråga. Precis som andra alternativ på frågenivå kan du använda den tillsammans med planguider för att matcha texten i en fråga som körs från en session och automatiskt använda en plan som påverkar spårningsflaggan när den här frågan kompileras. Alternativet QUERYTRACEON
stöds endast för query optimizer-spårningsflaggor. Mer information finns i Spårningsflaggor.
Om du använder det här alternativet returneras inga fel eller varningar om ett spårningsflagganummer som inte stöds används. Om den angivna spårningsflaggan inte är en som påverkar en frågekörningsplan ignoreras alternativet tyst.
Om du vill använda mer än en spårningsflagga i en fråga anger du ett QUERYTRACEON
tips för varje enskilt spårningsflagganummer.
RECOMPILE
Instruerar SQL Server Database Engine att generera en ny, tillfällig plan för frågan och omedelbart ta bort planen när frågan har slutfört körningen. Den genererade frågeplanen ersätter inte en plan som lagras i cacheminnet när samma fråga körs utan RECOMPILE
tips. Utan att ange RECOMPILE
cachelagrar databasmotorn frågeplaner och återanvänder dem. När frågeplaner kompileras använder RECOMPILE
frågetips de aktuella värdena för eventuella lokala variabler i frågan. Om frågan finns i en lagrad procedur skickas de aktuella värdena till alla parametrar.
RECOMPILE
är ett användbart alternativ till att skapa en lagrad procedur.
RECOMPILE
använder WITH RECOMPILE
-satsen när endast en delmängd frågor i den lagrade proceduren, i stället för hela den lagrade proceduren, måste kompileras om. Mer information finns i Kompilera om en lagrad procedur.
RECOMPILE
är också användbart när du skapar planguider.
ROBUST PLAN
Tvingar Frågeoptimeraren att prova en plan som fungerar för den maximala potentiella radstorleken, eventuellt på bekostnad av prestanda. När frågan bearbetas kan mellanliggande tabeller och operatorer behöva lagra och bearbeta rader som är bredare än någon av indataraderna när frågan bearbetas. Raderna kan vara så breda att den specifika operatorn ibland inte kan bearbeta raden. Om raderna är så breda genererar databasmotorn ett fel under frågekörningen. Med hjälp av ROBUST PLAN
instruerar du frågeoptimeraren att inte överväga några frågeplaner som kan stöta på det här problemet.
Om en sådan plan inte är möjlig returnerar Frågeoptimeraren ett fel i stället för att skjuta upp felidentifiering till frågekörning. Rader kan innehålla kolumner med variabel längd. Databasmotorn gör att rader kan definieras som har en maximal potentiell storlek utöver databasmotorns möjlighet att bearbeta dem. Trots den maximala potentiella storleken lagrar ett program i allmänhet rader som har faktiska storlekar inom de gränser som databasmotorn kan bearbeta. Om databasmotorn stöter på en rad som är för lång returneras ett körningsfel.
ANVÄND TIPS ( 'hint_name' )
gäller för: SQL Server (från och med SQL Server 2016 (13.x) SP1) och Azure SQL Database.
Ger en eller flera extra tips till frågeprocessorn. De extra tipsen anges med ett tipsnamn inom enkla citattecken.
Tips
Tipsnamn är skiftlägeskänsliga.
Följande tipsnamn stöds:
Antydan | Beskrivning |
---|---|
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
|
Genererar en frågeplan med antagandet Enkel inneslutning i stället för standardantagandet för grundläggande inneslutning för kopplingar, under Query Optimizer Cardinality Estimation modell för SQL Server 2014 (12.x) och senare versioner. Det här tipsnamnet motsvarar spårningsflagga 9476. |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Genererar en plan med minimal selektivitet när du beräknar OCH predikat för filter för att ta hänsyn till fullständig korrelation. Det här tipsnamnet motsvarar Spårningsflagga 4137 när det används med kardinalitetsuppskattningsmodellen för SQL Server 2012 (11.x) och tidigare versioner och har liknande effekt när spårningsflagga 9471 används med kardinalitetsuppskattningsmodellen för SQL Server 2014 (12.x) och senare versioner. |
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' |
Genererar en plan med maximal selektivitet när du beräknar OCH predikat för filter som ska ta hänsyn till fullständigt oberoende. Det här tipsnamnet är standardbeteendet för kardinalitetsuppskattningsmodellen för SQL Server 2012 (11.x) och tidigare versioner, och motsvarar spårningsflagga 9472 när den används med kardinalitetsuppskattningsmodellen för SQL Server 2014 (12.x) och senare versioner. gäller för: Azure SQL Database |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Genererar en plan som använder mest till minst selektivitet när du beräknar OCH predikat för filter som ska ta hänsyn till partiell korrelation. Det här tipsnamnet är standardbeteendet för modellen för kardinalitetsuppskattning i SQL Server 2014 (12.x) och senare versioner. gäller för: Azure SQL Database |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Inaktiverar anpassningsbara kopplingar i batchläge. Mer information finns i Batch-läge Adaptiva kopplingar. gäller för: SQL Server 2017 (14.x) och senare versioner och Azure SQL Database |
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' |
Inaktiverar feedback om minnesåtergivning i batchläge. Mer information finns i Minnesåtergivning i Batch-läge. gäller för: SQL Server 2017 (14.x) och senare versioner och Azure SQL Database |
'DISABLE_DEFERRED_COMPILATION_TV' |
Inaktiverar uppskjuten kompilering av tabellvariabel. Mer information finns i Tabellvariabeln uppskjuten kompilering. gäller för: SQL Server 2019 (15.x) och senare versioner och Azure SQL Database |
'DISABLE_INTERLEAVED_EXECUTION_TVF' |
Inaktiverar interfolierad körning för tabellvärdesfunktioner med flera instruktioner. Mer information finns i Interleaved-körning för tabellvärdesfunktioner med flera instruktioner. gäller för: SQL Server 2017 (14.x) och senare versioner och Azure SQL Database |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Instruerar frågeprocessorn att inte använda en sorteringsåtgärd (batchsortering) för optimerade kapslade loopkopplingar när en frågeplan genereras. Det här tipsnamnet motsvarar spårningsflagga 2340. Det här tipset gäller även explicit sortering och batchsortering. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Gör att SQL Server genererar en plan som inte använder radmåländringar med frågor som innehåller dessa nyckelord: - TOP - OPTION (FAST N) - IN - EXISTS Det här tipsnamnet motsvarar spårningsflagga 4138. |
'DISABLE_PARAMETER_SNIFFING' |
Instruerar Query Optimizer att använda genomsnittlig datadistribution vid kompilering av en fråga med en eller flera parametrar. Den här instruktionen gör frågeplanen oberoende av parametervärdet som först användes när frågan kompilerades. Det här tipsnamnet motsvarar spårningsflagga 4136 eller databasomfattningskonfiguration inställning PARAMETER_SNIFFING = OFF . |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Inaktiverar feedback om minnesåtergivning i radläge. Mer information finns i Minnesåtergivning för radläge. gäller för: SQL Server 2019 (15.x) och senare versioner och Azure SQL Database |
'DISABLE_TSQL_SCALAR_UDF_INLINING' |
Inaktiverar skalär UDF-inlining. Mer information finns i Scalar UDF-inlining. gäller för: SQL Server 2019 (15.x) och senare versioner och Azure SQL Database |
'DISALLOW_BATCH_MODE' |
Inaktiverar körning av batchläge. Mer information finns i körningslägen. gäller för: SQL Server 2019 (15.x) och senare versioner och Azure SQL Database |
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' |
Aktiverar automatiskt genererad snabbstatistik (histogramändring) för alla inledande indexkolumner för vilka kardinalitetsuppskattning behövs. Histogrammet som används för att uppskatta kardinaliteten justeras vid frågekompileringstiden för att ta hänsyn till det faktiska maximala eller lägsta värdet för den här kolumnen. Det här tipsnamnet motsvarar spårningsflagga 4139. |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Aktiverar snabbkorrigeringar för frågeoptimeraren (ändringar som släppts i kumulativa UPPDATERINGAR och Service Pack för SQL Server). Det här tipsnamnet motsvarar spårningsflagga 4199 eller databasomfattande konfiguration inställning QUERY_OPTIMIZER_HOTFIXES = ON . |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
Tvingar frågeoptimeraren att använda kardinalitetsuppskattning modell som motsvarar den aktuella databaskompatibilitetsnivån. Använd det här tipset om du vill åsidosätta databasomfattande konfiguration inställning LEGACY_CARDINALITY_ESTIMATION = ON eller spårningsflagga 9481. |
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
|
Tvingar frågeoptimeraren att använda kardinalitetsuppskattning modell av SQL Server 2012 (11.x) och tidigare versioner. Det här tipsnamnet motsvarar spårningsflagga 9481 eller databasomfattande konfiguration inställning LEGACY_CARDINALITY_ESTIMATION = ON . |
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
1 |
Tvingar frågeoptimerarbeteendet på frågenivå. Det här beteendet inträffar som om frågan kompilerades med databaskompatibilitetsnivån n, där n är en databaskompatibilitetsnivå som stöds. En lista över värden som stöds för nfinns i sys.dm_exec_valid_use_hints. gäller för: SQL Server 2017 (14.x) CU 10 och senare versioner och Azure SQL Database |
'QUERY_PLAN_PROFILE'
2 |
Möjliggör enkel profilering för frågan. När en fråga som innehåller det här nya tipset är klar utlöses en ny utökad händelse, query_plan_profile . Den här utökade händelsen exponerar körningsstatistik och faktisk körningsplan-XML som liknar den query_post_execution_showplan utökade händelsen, men endast för frågor som innehåller det nya tipset.gäller för: SQL Server 2016 (13.x) SP 2 CU 3, SQL Server 2017 (14.x) CU 11 och senare versioner |
1 Tipset QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
åsidosätter inte standardinställningen eller den äldre kardinalitetsuppskattningen, om du tvingar den genom databasomfattande konfiguration, spårningsflagga eller något annat frågetips som QUERYTRACEON
. Det här tipset påverkar bara beteendet för frågeoptimeraren. Det påverkar inte andra funktioner i SQL Server som kan bero på databaskompatibilitetsnivå, till exempel tillgängligheten för vissa databasfunktioner. Mer information finns i Developer's Choice: Hinting Query Execution model.
2 Om du aktiverar insamling av den query_post_execution_showplan
utökade händelsen läggs standardprofileringsinfrastrukturen till i varje fråga som körs på servern och kan därför påverka den övergripande serverprestandan. Om du aktiverar insamlingen av query_thread_profile
utökad händelse för att använda infrastruktur för enkel profilering i stället resulterar detta i mycket mindre prestandaomkostnader men påverkar fortfarande den övergripande serverprestandan. Om du aktiverar den query_plan_profile
utökade händelsen aktiverar detta endast den enkla profileringsinfrastrukturen för en fråga som körs med query_plan_profile
och därför inte påverkar andra arbetsbelastningar på servern. Använd det här tipset för att profilera en specifik fråga utan att påverka andra delar av serverarbetsbelastningen. Mer information om enkel profilering finns i Infrastruktur för frågeprofilering.
Listan över alla USE HINT
namn som stöds kan efterfrågas med hjälp av den dynamiska hanteringsvyn sys.dm_exec_valid_use_hints.
Viktigt!
Vissa USE HINT
tips kan vara i konflikt med spårningsflaggor som är aktiverade på global nivå eller sessionsnivå eller databasomfattande konfigurationsinställningar. I det här fallet har frågenivåtipset (USE HINT
) alltid företräde. Om en USE HINT
står i konflikt med ett annat frågetips eller en spårningsflagga som är aktiverad på frågenivå (till exempel genom QUERYTRACEON
) genererar SQL Server ett fel när frågan körs.
ANVÄND PLAN N"xml_plan"
Tvingar frågeoptimeraren att använda en befintlig frågeplan för en fråga som anges av xml_plan.
USE PLAN
kan inte anges med INSERT
, UPDATE
, MERGE
eller DELETE
-instruktioner.
Den resulterande körningsplanen som framtvingas av den här funktionen är densamma eller liknar den plan som tvingas fram. Eftersom den resulterande planen kanske inte är identisk med den plan som anges av USE PLAN
kan planernas prestanda variera. I sällsynta fall kan prestandaskillnaden vara betydande och negativ. I så fall måste administratören ta bort den framtvingade planen.
TABELLTIPS ( exposed_object_name [ , <table_hint> [ [ , ] ... n ] ] )
Tillämpar den angivna tabelltipset på tabellen eller vyn som motsvarar exposed_object_name. Vi rekommenderar att du bara använder ett tabelltips som ett frågetips i kontexten för en -planguide.
exposed_object_name kan vara en av följande referenser:
När ett alias används för tabellen eller vyn i FROM--satsen i frågan är exposed_object_name aliaset.
När ett alias inte används är exposed_object_name den exakta matchningen av tabellen eller vyn som refereras i
FROM
-satsen. Om tabellen eller vyn till exempel refereras med ett tvådelade namn är exposed_object_name samma tvådelade namn.
När du anger exposed_object_name utan att ange ett tabelltips ignoreras alla index som du anger i frågan som en del av ett tabelltips för objektet. Frågeoptimeraren avgör sedan indexanvändningen. Du kan använda den här tekniken för att eliminera effekten av en INDEX
tabelltips när du inte kan ändra den ursprungliga frågan. Se J-exempel.
<table_hint>
NOEXPAND [ , INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) ] | INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) | FORCESEEK [ ( index_value ( index_column_name [,... ] ) ) ) ] | FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | ÖGONBLICKSBILD | SPATIAL_WINDOW_MAX_CELLS = integer_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK
Tabelltipset som ska tillämpas på tabellen eller vyn som motsvarar exposed_object_name som ett frågetips. En beskrivning av dessa tips finns i Tabelltips.
Andra tabelltips än INDEX
, FORCESCAN
och FORCESEEK
tillåts inte som frågetips om inte frågan redan har en WITH
-sats som anger tabelltipset. Mer information finns i avsnittet Kommentarer.
Försiktighet
Om du anger FORCESEEK
med parametrar begränsas antalet planer som kan beaktas av frågeoptimeraren mer än när du anger FORCESEEK
utan parametrar. Detta kan leda till att felet "Planen kan inte genereras" inträffar i fler fall.
FÖR TIDSSTÄMPEL FRÅN och med "point_in_time"
gäller för: Microsoft Fabric Data Warehouse
Använd syntaxen TIMESTAMP
i OPTION
-satsen för att fråga efter data som tidigare, en del av tidsresefunktionen i Synapse Data Warehouse i Microsoft Fabric.
Ange point_in_time i formatet yyyy-MM-ddTHH:mm:ss[.fff]
för att returnera data som de visades vid den tidpunkten. Tidszonen finns alltid i UTC. Använd CONVERT
syntaxen för det datumtidsformat som krävs med format 126.
Det TIMESTAMP AS OF
tipset kan bara anges en gång med hjälp av OPTION
-satsen. Mer information och begränsningar finns i Query data as it existed in the past.
FORCE [ SINGLE NODE | DISTRIBUERAD ] PLAN
gäller för: Microsoft Fabric Data Warehouse
Tillåter användaren att välja om en enskild nodplan ska framtvingas eller en distribuerad plan för frågekörning.
Anmärkningar
Frågetips kan inte anges i en INSERT
-instruktion, förutom när en SELECT
-sats används i -instruktionen.
Frågetips kan endast anges i frågan på den översta nivån, inte i underfrågor. När ett tabelltips anges som ett frågetips kan tipset anges i frågan på den översta nivån eller i en underfråga. Värdet som anges för exposed_object_name i TABLE HINT
-satsen måste dock matcha exakt det exponerade namnet i frågan eller underfrågan.
Ange tabelltips som frågetips
Vi rekommenderar att du använder INDEX
, FORCESCAN
eller FORCESEEK
tabelltips som ett frågetips endast i kontexten för en -planguide. Planguider är användbara när du inte kan ändra den ursprungliga frågan, till exempel eftersom det är ett program från tredje part. Frågetipset som anges i planguiden läggs till i frågan innan den kompileras och optimeras. För ad hoc-frågor använder du endast TABLE HINT
-satsen när du testar planguideinstruktioner. För alla andra ad hoc-frågor rekommenderar vi att du endast anger dessa tips som tabelltips.
När det anges som ett frågetips är INDEX
, FORCESCAN
och FORCESEEK
tabelltips giltiga för följande objekt:
- Tabeller
- Visningar
- Indexerade vyer
- Vanliga tabelluttryck (tipset måste anges i
SELECT
-instruktionen vars resultatuppsättning fyller det gemensamma tabelluttrycket) - Dynamiska hanteringsvyer (DMV:er)
- Namngivna underfrågor
Du kan ange INDEX
, FORCESCAN
och FORCESEEK
tabelltips som frågetips för en fråga som inte har några befintliga tabelltips. Du kan också använda dem för att ersätta befintliga INDEX
, FORCESCAN
eller FORCESEEK
tips i frågan.
Andra tabelltips än INDEX
, FORCESCAN
och FORCESEEK
tillåts inte som frågetips om inte frågan redan har en WITH
-sats som anger tabelltipset. I det här fallet måste ett matchande tips också anges som ett frågetips. Ange matchande tips som ett frågetips med hjälp av TABLE HINT
i OPTION
-satsen. Den här specifikationen bevarar frågans semantik. Om frågan till exempel innehåller tabelltipset NOLOCK
måste OPTION
-satsen i parametern @hints i planguiden också innehålla NOLOCK
tips. Se Exempel K.
Ange tips med Query Store-tips
Du kan framtvinga tips om frågor som identifieras via Query Store utan att göra kodändringar med hjälp av Query Store-tips funktion. Använd den sys.sp_query_store_set_hints lagrade proceduren för att tillämpa ett tips på en fråga. Se Exempel N.
Stöd för frågetips i Fabric Data Warehouse
Microsoft Fabric Data Warehouse stöder en delmängd frågetips:
HASH GROUP
ORDER GROUP
MERGE UNION
HASH UNION
CONCAT UNION
FORCE ORDER
USE HINT
ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES
ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
Dessa frågetips är exklusiva för Microsoft Fabric Data Warehouse:
-
FORCE SINGLE NODE PLAN
,FORCE DISTRIBUTED PLAN
Exempel
A. Använda MERGE JOIN
I följande exempel anges att MERGE JOIN
kör åtgärden JOIN
i frågan. I exemplet används databasen AdventureWorks2022
.
SELECT *
FROM Sales.Customer AS c
INNER JOIN Sales.CustomerAddress AS ca ON c.CustomerID = ca.CustomerID
WHERE TerritoryID = 5
OPTION (MERGE JOIN);
GO
B. Använd OPTIMERA FÖR
I följande exempel instrueras frågeoptimeraren att använda värdet 'Seattle'
för @city_name
och att använda predikatets genomsnittliga selektivitet för alla kolumnvärden för @postal_code
när frågan optimeras. I exemplet används databasen AdventureWorks2022
.
CREATE PROCEDURE dbo.RetrievePersonAddress
@city_name NVARCHAR(30),
@postal_code NVARCHAR(15)
AS
SELECT * FROM Person.Address
WHERE City = @city_name AND PostalCode = @postal_code
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) );
GO
C. Använda MAXRECURSION
MAXRECURSION
kan användas för att förhindra att ett dåligt format rekursivt vanligt tabelluttryck kommer in i en oändlig loop. I följande exempel skapas avsiktligt en oändlig loop och MAXRECURSION
tips används för att begränsa antalet rekursionsnivåer till två. I exemplet används databasen AdventureWorks2022
.
--Creates an infinite loop
WITH cte (CustomerID, PersonID, StoreID) AS
(
SELECT CustomerID, PersonID, StoreID
FROM Sales.Customer
WHERE PersonID IS NOT NULL
UNION ALL
SELECT cte.CustomerID, cte.PersonID, cte.StoreID
FROM cte
JOIN Sales.Customer AS e
ON cte.PersonID = e.CustomerID
)
--Uses MAXRECURSION to limit the recursive levels to 2
SELECT CustomerID, PersonID, StoreID
FROM cte
OPTION (MAXRECURSION 2);
GO
När kodfelet har korrigerats krävs inte längre MAXRECURSION
.
D. Använda MERGE UNION
I följande exempel används MERGE UNION
frågetips. I exemplet används databasen AdventureWorks2022
.
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
E. Använda HASH GROUP och FAST
I följande exempel används HASH GROUP
och FAST
frågetips. I exemplet används databasen AdventureWorks2022
.
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
F. Använda MAXDOP
I följande exempel används MAXDOP
frågetips. I exemplet används databasen AdventureWorks2022
.
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (MAXDOP 2);
GO
G. Använda INDEX
I följande exempel används tipset INDEX
. Det första exemplet anger ett enda index. Det andra exemplet anger flera index för en enskild tabellreferens. Eftersom du använder INDEX
tips på en tabell som använder ett alias i båda exemplen måste TABLE HINT
-satsen också ange samma alias som det exponerade objektnamnet. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e, INDEX (IX_Employee_ManagerID)))';
GO
EXEC sp_create_plan_guide
@name = N'Guide2',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e, INDEX(PK_Employee_EmployeeID, IX_Employee_ManagerID)))';
GO
H. Använda FORCESEEK
I följande exempel används FORCESEEK
tabelltips. Satsen TABLE HINT
måste också ange samma tvådelade namn som det exponerade objektnamnet. Ange namnet när du använder INDEX
tips på en tabell som använder ett tvådelade namn. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide3',
@stmt = N'SELECT c.LastName, c.FirstName, HumanResources.Employee.Title
FROM HumanResources.Employee
JOIN Person.Contact AS c ON HumanResources.Employee.ContactID = c.ContactID
WHERE HumanResources.Employee.ManagerID = 3
ORDER BY c.LastName, c.FirstName;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT( HumanResources.Employee, FORCESEEK))';
GO
Jag. Använda flera tabelltips
I följande exempel tillämpas INDEX
tips på en tabell och FORCESEEK
tips på en annan. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide4',
@stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, INDEX( IX_Employee_ManagerID))
, TABLE HINT (c, FORCESEEK))';
GO
J. Använd TABELLTIPS för att åsidosätta ett befintligt tabelltips
I följande exempel visas hur du använder tipset TABLE HINT
. Du kan använda tipset utan att ange ett tips för att åsidosätta det INDEX
tabelltips som du anger i FROM
-satsen i frågan. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide5',
@stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e WITH (INDEX (IX_Employee_ManagerID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT(e))';
GO
K. Ange semantik som påverkar tabelltips
Följande exempel innehåller två tabelltips i frågan: NOLOCK
, som är semantisk-påverkar och INDEX
, vilket inte påverkar semantiken. För att bevara frågans semantik anges NOLOCK
-tipset i OPTIONS
-satsen i planguiden. Tillsammans med tipset NOLOCK
anger du INDEX
och FORCESEEK
tips och ersätter det icke-semantiska INDEX
tipset i frågan vid kompilering och optimering av instruktionen. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide6',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 3;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, INDEX(IX_Employee_ManagerID), NOLOCK, FORCESEEK))';
GO
I följande exempel visas en alternativ metod för att bevara frågans semantik och låta optimeraren välja ett annat index än det index som anges i tabelltipset. Tillåt att optimeraren väljer genom att ange NOLOCK
tips i OPTIONS
-satsen. Du anger tipset eftersom det är semantiskt påverkande. Ange sedan nyckelordet TABLE HINT
med endast en tabellreferens och inget INDEX
tips. I exemplet används databasen AdventureWorks2022
.
EXEC sp_create_plan_guide
@name = N'Guide7',
@stmt = N'SELECT c.LastName, c.FirstName, e.Title
FROM HumanResources.Employee AS e
WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID = 2;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION (TABLE HINT (e, NOLOCK))';
GO
L. Använd ANVÄND TIPS
I följande exempel används RECOMPILE
och USE HINT
frågetips. I exemplet används databasen AdventureWorks2022
.
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (RECOMPILE, USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES', 'DISABLE_PARAMETER_SNIFFING'));
GO
M. Använd QUERYTRACEON-TIPS
I följande exempel används QUERYTRACEON
frågetips. I exemplet används databasen AdventureWorks2022
. Du kan aktivera alla planpåverkande snabbkorrigeringar som styrs av spårningsflagga 4199 för en viss fråga med hjälp av följande fråga:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);
Du kan också använda flera spårningsflaggor som i följande fråga:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Använda Query Store-tips
Query Store antyder funktion i Azure SQL Database är en lätthanterlig metod för att forma frågeplaner utan att ändra programkod.
Identifiera först frågan som redan har körts i katalogvyerna för Query Store, till exempel:
SELECT q.query_id, qt.query_sql_text
FROM sys.query_store_query_text qt
INNER JOIN sys.query_store_query q ON
qt.query_text_id = q.query_text_id
WHERE query_sql_text like N'%ORDER BY ListingPrice DESC%'
AND query_sql_text not like N'%query_store%';
GO
I följande exempel används tipset för att tvinga äldre kardinalitetsestimator till query_id 39, som identifieras i Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
I följande exempel används tipset för att framtvinga en maximal minnesanvändningsstorlek i PERCENT
konfigurerad minnesgräns till query_id
39, som identifieras i Query Store:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(MAX_GRANT_PERCENT=10)';
I följande exempel används flera frågetips för query_id 39, inklusive RECOMPILE
, MAXDOP 1
och SQL Server 2012 (11.x) frågeoptimerarbeteende:
EXEC sys.sp_query_store_set_hints @query_id= 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
O. Fråga efter data från och med en tidpunkt
gäller för: Warehouse i Microsoft Fabric
Använd TIMESTAMP
syntaxen i OPTION
-satsen för att fråga efter data som tidigare, i Synapse Data Warehouse i Microsoft Fabric. Följande exempelfråga returnerar data som de visades den 13 mars 2024 kl. 19:39:35.28 UTC. Tidszonen finns alltid i UTC.
SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC