Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Widok złożony

Termin Definicja
Widok złożony

Widok złożony łączy wiele tabel, warunków i agregacji w jednej definicji zapytania.

Zapytanie zapisane pod nazwą

Widok w SQL Server to obiekt bazy, który przechowuje treść instrukcji SELECT i udostępnia jej wynik tak, jakby był tabelą. Widok złożony wykracza poza prosty wybór kolumn z jednego źródła: łączy kilka tabel operatorami JOIN, filtruje wiersze w WHERE, grupuje je w GROUP BY i liczy agregaty funkcjami SUM, COUNT czy AVG, a często sięga też po funkcje okna z klauzulą OVER. Tworzy się go instrukcją CREATE VIEW, a jego definicję da się podejrzeć w widoku systemowym sys.sql_modules albo procedurą sp_helptext. Dane nie są przy tym duplikowane — przy każdym odwołaniu silnik podstawia definicję widoku do zapytania i optymalizuje całość jako jeden plan.

Zwykły widok, widok indeksowany i tabela pomocnicza

Dopóki widok jest tylko definicją, jego koszt jest kosztem zapytania źródłowego — odwołanie do widoku spinającego pięć tabel po milionie wierszy będzie wolne za każdym razem. Widok indeksowany, czyli taki z założonym unikatowym indeksem klastrowym, przechowuje wynik fizycznie i odświeża go przy każdej zmianie danych, ale wymaga tworzenia z opcją SCHEMABINDING i akceptuje tylko podzbiór składni: bez podzapytań, bez lewych złączeń, bez klauzuli DISTINCT, a przy agregacji wymaga obecności COUNT_BIG(*). Alternatywą bywa tabela pomocnicza odświeżana nocnym zadaniem Agenta SQL — mniej elegancka, lecz przewidywalna w kosztach i łatwiejsza do naprawy, gdy raport zaczyna przekraczać limit czasu.

Miejsca, w których widoki gryzą

Klasyczny problem to widok zbudowany na innym widoku, ten na kolejnym, a w efekcie plan wykonania obejmujący kilkanaście tabel dla zapytania, które pobiera trzy kolumny. Drugi to zapisanie definicji z gwiazdką: SELECT * zapamiętuje listę kolumn z chwili tworzenia, więc kolumna dodana później w tabeli nie pojawia się w widoku, dopóki nie wykona się sp_refreshview. Trzeci dotyczy modyfikacji — widok z agregacją lub złączeniem wielu tabel nie przyjmie polecenia UPDATE, chyba że zdefiniowano wyzwalacz INSTEAD OF. Zdarza się także, że po zmianie nazwy kolumny w tabeli widok pozostaje w bazie i psuje się dopiero przy pierwszym uruchomieniu raportu, bo SQL Server nie sprawdza jego poprawności w momencie zapisu definicji.

Raporty, które przestały się generować w programie handlowym

Spowolnione zestawienia i błędy przy zamknięciu miesiąca w Subiekcie, WAPRO czy Comarchu bardzo często sprowadzają się do zapytań opartych na widokach — na przestarzałych statystykach, brakującym indeksie albo definicji, która przestała pasować do zmienionego schematu. Serwisujemy te systemy wraz z ich bazami na SQL Server, sprawdzamy plany wykonania i przywracamy działanie raportów. Obsługujemy firmy w trybie całodobowym, bo zamknięcie okresu rzadko wypada w godzinach pracy biura.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę