Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Určuje, že by se měl použít uvedený tip dotazu v celém dotazu. Každou nápovědu k dotazu je možné zadat pouze jednou, i když je povoleno více tipů dotazu. Pomocí příkazu lze zadat pouze jednu OPTION klauzuli.
Tuto klauzuli lze zadat v příkazech SELECT, DELETE, UPDATEa MERGE příkazy.
Syntax
Syntaxe pro SQL Server, spravovanou instanci Azure SQL a Azure SQL Database:
[ OPTION ( <query_hint> [ , ...n ] ) ]
Syntaxe pro sklad v Microsoft Fabric:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| FOR TIMESTAMP AS OF '<point_in_time>'
Syntaxe koncového bodu Azure Synapse Analytics and Analytics Platform System (PDW) a SQL Analytics v Microsoft Fabric:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
Syntaxe bezserverového fondu SQL ve službě Azure Synapse Analytics:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name
Arguments
query_hint
Klíčová slova označující, které rady optimalizátoru se používají k přizpůsobení způsobu, jakým databázový stroj zpracovává příkaz. Další informace najdete v části Rady k dotazům.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití klauzule OPTION s klauzulí GROUP BY
Následující příklad ukazuje, jak OPTION se klauzule používá s klauzulí GROUP BY .
USE AdventureWorks2022;
GO
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
Příklady: Azure Synapse Analytics a Analytics Platform System (PDW)
B. Příkaz SELECT s popiskem v klauzuli OPTION
Následující příklad ukazuje SELECT tvrzení s označením ve OPTION větě.
SELECT * FROM FactResellerSales
OPTION (LABEL = 'q17');
C. Příkaz SELECT s nápovědou dotazu v klauzuli OPTION
Následující příklad ukazuje SELECT příkaz, který v klauzuli používá nápovědu HASH JOINOPTION dotazu.
-- Uses AdventureWorks
SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
D. Příkaz SELECT s popiskem a více nápovědami dotazu v klauzuli OPTION
Následující příklad je příkaz Azure Synapse Analytics SELECT , který obsahuje popisek a několik tipů pro dotazy. Když se dotaz spustí na výpočetních uzlech, SQL Server použije spojení hash nebo slučovací spojení podle strategie, kterou SQL Server rozhodne, je nejoptimálnější.
SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (Label = 'CustJoin', HASH JOIN, MERGE JOIN);
E. Použití nápovědy k dotazu při dotazování zobrazení
Následující příklad vytvoří zobrazení s názvem CustomerView a pak použije nápovědu HASH JOIN dotazu v dotazu, který odkazuje na zobrazení a tabulku.
CREATE VIEW CustomerView
AS
SELECT CustomerKey,
FirstName,
LastName
FROM ssawPDW..DimCustomer;
GO
SELECT COUNT(*)
FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
GO
DROP VIEW CustomerView;
GO
F. Dotaz s dílčím výběrem a nápovědou k dotazu
Následující příklad ukazuje dotaz, který obsahuje dílčí výběr i nápovědu dotazu. Nápovědu k dotazu se použije globálně. Nápovědy k dotazu nelze připojit k příkazu subselect.
CREATE VIEW CustomerView
AS
SELECT CustomerKey,
FirstName,
LastName
FROM ssawPDW..DimCustomer;
GO
SELECT *
FROM (
SELECT COUNT(*) AS a
FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
) AS t
OPTION (HASH JOIN);
G. Vynutit, aby pořadí spojení odpovídalo pořadí v dotazu
Následující příklad používá nápovědu FORCE ORDER k vynucení plánu dotazu použít pořadí spojení určené dotazem. Tento tip zlepšuje výkon některých dotazů, ale ne všechny dotazy.
Tento dotaz získá čísla oddílů, hodnoty hranic, typy hodnot hranic a řádky na hranici oddílů v ProspectiveBuyer tabulce ssawPDW databáze.
SELECT sp.partition_number,
prv.value AS boundary_value,
lower(sty.name) AS boundary_value_type,
sp.rows
FROM sys.tables st
INNER JOIN sys.indexes si
ON st.object_id = si.object_id AND si.index_id < 2
INNER JOIN sys.partitions sp
ON sp.object_id = st.object_id AND sp.index_id = si.index_id
INNER JOIN sys.partition_schemes ps
ON ps.data_space_id = si.data_space_id
INNER JOIN sys.partition_range_values prv
ON prv.function_id = ps.function_id
INNER JOIN sys.partition_parameters pp
ON pp.function_id = ps.function_id
INNER JOIN sys.types sty
ON sty.user_type_id = pp.user_type_id AND prv.boundary_id = sp.partition_number
WHERE st.object_id = (
SELECT object_id
FROM sys.objects
WHERE name = 'FactResellerSales'
)
ORDER BY sp.partition_number
OPTION (FORCE ORDER);
H. Použití EXTERNALPUSHDOWN
Následující příklad vynutí posun WHERE klauzule na úlohu MapReduce v externí tabulce Hadoop.
SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);
Následující příklad zabraňuje posunu WHERE klauzule do úlohy MapReduce v externí tabulce Hadoop. Všechny řádky se vrátí do pdW, kde WHERE se klauzule použije.
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
Příklady: Microsoft Fabric Data Warehouse
I. Dotazování dat k určitému bodu v čase
Další informace najdete v nápovědě k dotazu TIMESTAMP.
TIMESTAMP Pomocí syntaxe v OPTION klauzuli můžete dotazovat data, která existovala v minulosti v datovém skladu Fabric. Následující ukázkový dotaz vrátí data, která se zobrazila 13. března 2024 v 7:39:35.28 UTC. Časové pásmo je vždy ve standardu 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
J. Příkaz SELECT s popiskem v klauzuli OPTION
Následující příklad ukazuje SELECT tvrzení s označením ve OPTION větě. Pro více informací viz Query labels in Fabric Data Warehouse.
SELECT * FROM FactResellerSales
OPTION (LABEL = 'q17');
Související obsah
- Rady dotazů (Transact-SQL)
- SELECT (Transact-SQL)
- AKTUALIZACE (Transact-SQL)
- MERGE (Transact-SQL)
- DELETE (Transact-SQL)