/ / KeyLookup w masywnych kolumnach na serwerze sql - sql-server, wydajność, indeksowanie, optymalizacja zapytań

KeyLookup w masywnych kolumnach na serwerze sql - sql-server, wydajność, indeksowanie, optymalizacja zapytań

Mam jedno proste zapytanie, które ma wielekolumny (więcej niż 1000). Kiedy biegnę z jedną kolumną, daje mi to wynik w 2 sekundy z właściwym szukaniem indeksu, odczytem logicznym, cpu i wszystko jest poniżej progów.

Ale kiedy wybiorę więcej niż 1000 kolumn, to zajmie to 11 minut i da mi klucz wyszukiwania.

Czy mieliście do czynienia z tego typu problemem? Wszelkie sugestie dotyczące tej kwestii?

Odpowiedzi:

0 dla odpowiedzi № 1

Zazwyczaj proponuję dodać te kolumny w INCLUDE pola indeksu nieklastrowego. Dodawanie ich do INCLUDE usuwa LOOKUP w planie wykonania. Ale jak wszystko z SQL Server, to zależy. W zależności od tego, jak używana jest tabela, np. Jeśli aktualizujesz tabelę bardziej niż zwykłą SELECTna nim, a następnie LOOKUP może być w porządku.


0 dla odpowiedzi nr 2

Jeśli to zapytanie jest uruchamiane raz w roku, narzutdodatkowego indeksu prawdopodobnie nie jest tego warta. Jeśli potrzebujesz szybkiego czasu reakcji, tego pojedynczego czasu w roku, w którym ma zostać uruchomiony, spójrz na "przed wykonaniem" go i po prostu przedstaw wynik użytkownikowi.

Różnica w planie zapytania może być różnaze względu na eliminację sprzężenia (jeśli zapytanie zawiera JOIN z wieloma tabelami) lub tylko, że dodatkowe kolumny, o które prosisz, nie istnieją w aktualnie istniejących indeksach ...