Rozwiązywanie problemów z niską wydajność kwerendy: Kardynalność oszacowania

optymalizator kwerendy w SQL Server jest oparty na kosztach.Oznacza to, że wybiera planów kwerend, które mają najniższy szacowany koszt wykonać przetwarzania.optymalizator kwerendy określa koszt wykonania planu kwerend na podstawie dwóch głównych czynników:

  • Całkowita liczba wierszy przetworzonych poziom każdego planu kwerend, nazywane Kardynalność planu.

  • Model ceny nabycia algorytm ustawieniem operatory używane w kwerendzie.

Pierwszym czynnikiem Kardynalność jest używany jako parametru wejściowego współczynnika drugi model ceny nabycia.Dlatego ulepszone Kardynalność prowadzi do lepszego szacowanych kosztów, a z kolei szybsze wykonanie planów.

SQL Server oszacowania cardinalities głównie z histogramy utworzone po indeksy lub statystyki są tworzone, ręcznie lub automatycznie.Czasami SQL Server używa również ograniczenie informacji i logiczne ponownego kwerendy w celu określenia kardynalność.

W następujących przypadkach SQL Server nie może obliczyć dokładnie cardinalities.Powoduje to obliczenia kosztów niedokładne, które mogą powodować planów kwerend warunkami panującymi.Unikanie konstrukcje te kwerendy może poprawić wydajność kwerendy.Czasami kwerendy alternatywnych form użytkowych lub inne środki są możliwe i te są wskazał.

  • Kwerendy zawierające predykaty operatorami porównania między różne kolumny tej samej tabela.

  • Spełnione są kwerendy z predykaty korzystające z operatorów i jeden z następujących czynności:

    • Brak statystyki nie na kolumnach zaangażowanymi po obu stronach podmiotów gospodarczych.

    • Rozkład wartości statystyki nie są jednolite, ale kwerenda stara wartość wysoce selektywne zestaw.Sytuacja ta może być zwłaszcza wtedy, gdy podmiot gospodarczy jest inny niż operator równości (=).

    • Nie używa orzeczenie równa (! =) operator porównania lub operator logiczny nie.

  • Kwerend korzystających z SQL Server funkcje wbudowane lub wartości wartość skalarna, zdefiniowanej przez użytkownika funkcja, których argument nie jest stała wartość.

  • Kwerendy, które obejmują Sprzęganie kolumn poprzez arytmetyczne lub ciąg operatorów łączenie.

  • Kwerendy, które porównują zmienne, których wartości nie są znane, gdy kwerenda jest skompilowany i zoptymalizowany.

Następujące środki, można spróbować zwiększyć wydajność na te typy kwerend:

  • Tworzenie indeksów przydatne lub statystyki kolumn, które są zaangażowane w kwerendzie.Aby uzyskać więcej informacji, zobacz Projektowanie indeksów i Aby poprawić wydajność kwerendy przy użyciu statystyk.

  • Należy rozważyć przy użyciu kolumny obliczane i poprawiania kwerendy, jeśli do porównywania lub łączenie dwóch lub więcej kolumn w kwerendzie użyto porównania lub operatorów arytmetycznych.Na przykład poniższa kwerenda porównuje wartości w dwóch kolumnach:

    SELECT * FROM MyTable
    WHERE MyTable.Col1 > MyTable.Col2
    

    Wydajność może zostać podniesiona, jeśli dodasz kolumna obliczana Col3 do MojaTabela , oblicza różnicę między Kol1 i Kol2 (Kol1 minus Kol2).Następnie od nowa napisać kwerendę:

    SELECT * FROM MyTable
    WHERE Col3 > 0
    

    Wydajność prawdopodobnie poprawi więcej jeśli budowanie indeksu MyTable.Col3.