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'


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow