Microsoft SQL Server
Wskazówki dotyczące zapytań
Szukaj…
DOŁĄCZ Wskazówki
Po połączeniu dwóch tabel optymalizator kwerendy programu SQL Server (QO) może wybrać różne typy złączeń, które będą używane w zapytaniu:
- Dołącz do HASH
- Dołącz do pętli
- Połącz MERGE
QO zbada plany i wybierze optymalnego operatora do łączenia tabel. Jeśli jednak masz pewność, że wiesz, który byłby optymalnym operatorem łączenia, możesz określić, jakiego rodzaju JOIN należy użyć. Łączenie wewnętrznej pętli wymusi na QO wybranie łączenia z zagnieżdżoną pętlą podczas łączenia dwóch tabel:
select top 100 *
from Sales.Orders o
inner loop join Sales.OrderLines ol
on o.OrderID = ol.OrderID
wewnętrzne połączenie scalające wymusi połączenie operatora MERGE:
select top 100 *
from Sales.Orders o
inner merge join Sales.OrderLines ol
on o.OrderID = ol.OrderID
wewnętrzna funkcja skrótu wymusi operację łączenia HASH:
select top 100 *
from Sales.Orders o
inner hash join Sales.OrderLines ol
on o.OrderID = ol.OrderID
Pogrupuj według wskazówek
Gdy używasz klauzuli GROUP BY, optymalizator zapytań SQL Server (QO) może wybierać różne typy operatorów grupujących:
- Agregat HASH, który tworzy mapę skrótów do grupowania wpisów
- Stream Aggregate, który działa dobrze z wcześniej zamówionymi danymi wejściowymi
Możesz wyraźnie wymagać, aby QO wybierała jednego lub drugiego operatora agregującego, jeśli wiesz, co byłoby optymalne. Dzięki OPTION (ORDER GROUP) QO zawsze wybierze agregację strumienia i doda operator sortowania przed agregacją strumienia, jeśli dane wejściowe nie zostaną posortowane:
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (ORDER GROUP)
Dzięki OPCJI (GRUPA KRESKOWA) QO zawsze wybierze agregat skrótu:
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (HASH GROUP)
SZYBKA wskazówka dotycząca wierszy
Określa, że zapytanie jest zoptymalizowane pod kątem szybkiego pobierania pierwszych strzałek numerycznych. Jest to nieujemna liczba całkowita. Po zwróceniu pierwszych strzałek numerycznych zapytanie kontynuuje wykonywanie i generuje pełny zestaw wyników.
select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (FAST 20)
Wskazówki UNION
Gdy używasz operatora UNION do dwóch wyników zapytania, Optymalizator zapytań (QO) może użyć następujących operatorów do utworzenia unii dwóch zestawów wyników:
- Scal (Unia)
- Concat (Unia)
- Hash Match (Union)
Możesz jawnie określić, którego operatora należy użyć za pomocą podpowiedzi OPTION ():
select OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Sales.Orders
where OrderDate > DATEADD(day, -1, getdate())
UNION
select PurchaseOrderID as OrderID, OrderDate, ExpectedDeliveryDate, Comments
from Purchasing.PurchaseOrders
where OrderDate > DATEADD(day, -1, getdate())
OPTION(HASH UNION)
-- or OPTION(CONCAT UNION)
-- or OPTION(MERGE UNION)
Opcja MAXDOP
Określa maksymalny stopień równoległości zapytania dla zapytania określającego tę opcję.
SELECT OrderID,
AVG(Quantity)
FROM Sales.OrderLines
GROUP BY OrderID
OPTION (MAXDOP 2);
Ta opcja zastępuje opcję konfiguracji MAXDOP sp_configure i Resource Governor. Jeśli MAXDOP jest ustawiony na zero, serwer wybiera maksymalny stopień równoległości.
INDEKS Wskazówki
Wskazówki dotyczące indeksu służą do wymuszenia użycia zapytania w określonym indeksie, zamiast pozwalać Optymalizatorowi zapytań programu SQL Server na wybranie tego, który uważa za najlepszy indeks. W niektórych przypadkach możesz uzyskać korzyści, określając indeks, którego musi użyć zapytanie. Zazwyczaj Optymalizator zapytań programu SQL Server wybiera najlepszy indeks odpowiedni dla zapytania, ale ze względu na brakujące / nieaktualne statystyki lub określone potrzeby możesz go wymusić.
SELECT *
FROM mytable WITH (INDEX (ix_date))
WHERE field1 > 0
AND CreationDate > '20170101'