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

Predicates

Termin Definicja
Predicates

Predicates to warunki filtrujące wiersze w zapytaniu, ich selektywność silnie wpływa na wybór planu wykonania.

Predykat jako warunek wyboru wierszy

Predicates, czyli predykaty zapytania, są warunkami logicznymi używanymi do określenia, które wiersze mają zostać uwzględnione w wyniku. W zapytaniu SQL predykat pojawia się najczęściej w klauzuli WHERE, ale może również występować w klauzulach JOIN, HAVING oraz w wyrażeniach warunkowych. Przykładowy warunek WHERE status = 'aktywny' ogranicza wynik do rekordów, dla których kolumna status ma wskazaną wartość. Predykat nie zmienia danych w tabeli, lecz wpływa na sposób ich wyboru podczas wykonywania zapytania.

Warunek może być prostym porównaniem, na przykład cena > 100, albo bardziej złożonym wyrażeniem połączonym operatorami logicznymi AND, OR i NOT. Stosuje się także operatory IN, BETWEEN, LIKE oraz IS NULL. Trzeba rozróżnić porównanie z wartością pustą od sprawdzania wartości NULL: wyrażenie kolumna = NULL nie jest prawidłowym testem obecności wartości pustej, ponieważ NULL oznacza brak znanej wartości. Do tego celu służy kolumna IS NULL albo kolumna IS NOT NULL.

Selektywność i plan wykonania zapytania

Selektywność predykatu opisuje, jak dużą część zbioru danych przepuszcza dany warunek. Predykat, który zwraca niewiele wierszy, jest zwykle bardziej selektywny niż warunek obejmujący większość tabeli. Informacja o selektywności pomaga optymalizatorowi zaplanować wykonanie zapytania. Może on wybrać między innymi skanowanie całej tabeli, odczyt indeksu, wyszukanie zakresu w indeksie albo połączenie kilku metod dostępu.

Sam fakt istnienia indeksu nie gwarantuje jego wykorzystania. Jeżeli predykat zwraca znaczną część tabeli, pełny skan może być tańszy niż odczyt indeksu i późniejsze pobieranie wielu wierszy z danych bazowych. Znaczenie ma również rozkład wartości w kolumnie, aktualność statystyk, liczba stron danych oraz koszt operacji wejścia-wyjścia. Dwa zapytania o podobnej składni mogą więc otrzymać różne plany wykonania, gdy dotyczą tabel o innym rozmiarze albo mają inne wartości w kolumnach filtrujących.

Predykaty a indeksy, typy danych i wartości NULL

Skuteczność filtrowania zależy od tego, czy warunek może zostać bezpośrednio wykorzystany do wyszukania danych w indeksie. Predykat oparty na kolumnie bez przekształcania jej wartości jest zazwyczaj łatwiejszy do optymalizacji niż warunek zawierający funkcję wykonywaną na każdej wartości, na przykład LOWER(nazwa) = 'monitor'. Problematyczne może być także porównywanie kolumny tekstowej z wartością innego typu, niejawne konwertowanie danych oraz rozpoczynanie wyszukiwania wzorcem od znaku % w wyrażeniu LIKE.

W zapytaniach z wieloma warunkami znaczenie ma logika trójwartościowa SQL. Oprócz wartości TRUE i FALSE występuje stan UNKNOWN, który często pojawia się przy operacjach na NULL. W klauzuli WHERE zachowywane są tylko wiersze, dla których wynik predykatu jest prawdziwy. Wiersz z wynikiem UNKNOWN nie przechodzi filtra. Z tego powodu warunek WHERE typ <> 'uszkodzony' nie obejmuje rekordów, w których kolumna typ ma wartość NULL. Jeżeli takie rekordy również mają zostać uwzględnione, należy jawnie opisać ten przypadek, na przykład przez połączenie warunku z OR typ IS NULL.

Znaczenie predykatów podczas analizy problemów z aplikacją

Nieprawidłowy predykat może powodować zarówno błędne wyniki, jak i niepotrzebne obciążenie laptopa lub komputera PC. Błąd logiczny w operatorach AND i OR, brak nawiasów przy mieszaniu warunków albo nieuwzględnienie wartości NULL może sprawić, że aplikacja wyświetli niepełną listę rekordów lub dane, które nie powinny zostać pokazane. Z kolei predykat o niskiej selektywności, funkcja wykonywana na kolumnie albo niezgodność typów danych może zwiększyć czas oczekiwania na wynik i obciążenie procesora, pamięci operacyjnej oraz dysku.

Podczas diagnostyki warto porównać wynik zapytania z oczekiwanym zakresem danych, sprawdzić wartości brzegowe, przeanalizować obecność NULL i zweryfikować plan wykonania udostępniany przez używane oprogramowanie bazodanowe. Należy także rozdzielić problem logiczny od sprzętowego: wolne zapytanie nie zawsze oznacza uszkodzenie dysku, a niepełny wynik nie musi wskazywać na awarię komputera. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, dlatego w przypadku objawów obejmujących również niestabilność systemu, błędy odczytu lub nagłe zawieszanie aplikacji można rozpocząć od diagnostyki sprzętu i środowiska pracy.

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