| Termin | Definicja |
|---|---|
| Zgodność typów w JOIN | Zgodność typów w JOIN wpływa na to, czy optymalizator może wykorzystać dostępne indeksy złączanych kolumn. Dlaczego typ kolumny zmienia plan złączeniaZgodność typów w klauzuli Jeżeli typy są zgodne, porównanie może zostać wykonane bez dodatkowego przeliczania każdej wartości. W takiej sytuacji indeks założony na kolumnie uczestniczącej w złączeniu może zostać wykorzystany do wyszukania pasujących rekordów. Gdy jedna strona porównania musi zostać jawnie albo niejawnie przekonwertowana, optymalizator może nadal znaleźć poprawny plan, ale może też uznać, że odczyt indeksu jest nieopłacalny lub niemożliwy w danym wariancie planu. Konwersja jawna i niejawna w warunku JOINProblem pojawia się często wtedy, gdy jedna tabela przechowuje identyfikator jako typ numeryczny, a druga jako tekst. Warunek łączący może wyglądać logicznie, lecz porównanie wymaga wtedy przekształcenia jednej wartości. Konwersja tekstu na liczbę może dodatkowo zakończyć się błędem, jeśli w kolumnie znajdują się znaki nienumeryczne, spacje lub inne dane, których nie można zamienić na wymagany typ. Konwersja liczby na tekst zwykle nie powoduje tego samego rodzaju błędu, ale może zmienić sposób wykorzystania indeksu, długość porównywanych wartości oraz koszty wykonania. Jawne rzutowanie typu porządkuje zapytanie i pokazuje, po której stronie ma nastąpić konwersja. Nie usuwa jednak kosztu tej operacji. Jeżeli funkcja konwersji jest wykonywana dla każdej wartości w dużej tabeli, silnik może najpierw przeskanować znaczną część danych, a dopiero potem porównywać wyniki. W praktyce właściwym rozwiązaniem jest ujednolicenie typu klucza w schemacie tabel, a nie dodawanie rzutowania do każdego zapytania. Gdy zmiana schematu nie jest możliwa, trzeba sprawdzić plan wykonania i zweryfikować, która kolumna jest przeliczana. Indeksy, selektywność i koszt odczytu rekordówIndeks na kolumnie używanej w Znaczenie ma także zakres typu. Łączenie liczby całkowitej z typem o większym zakresie może powodować konwersję do szerszego typu. Porównywanie kolumn tekstowych może wymagać zgodnego kodowania i porządku sortowania; różne reguły porównywania mogą wymusić dodatkową operację albo uniemożliwić bezpośrednie użycie indeksu. W przypadku wartości dziesiętnych należy uwzględnić precyzję i skalę, ponieważ dwa pola opisujące kwotę mogą przechowywać liczby o różnej dokładności. Daty, znaczniki czasu i tekstowe reprezentacje dat również nie powinny być mieszane bez świadomego określenia formatu i sposobu konwersji. Ocena problemu powinna obejmować rzeczywisty plan wykonania, a nie tylko tekst zapytania. W planie należy szukać operatorów konwersji, ostrzeżeń o niejawnym przekształceniu oraz różnicy między przewidywaną a faktyczną liczbą rekordów. Duża rozbieżność może wskazywać nie tylko na niezgodność typów, lecz także na nieaktualne statystyki, duplikaty kluczy lub brak selektywnego indeksu. Zmiana typu kolumny albo dodanie indeksu wymaga ponownego pomiaru czasu, liczby odczytanych stron i liczby zwróconych wierszy. Ujednolicanie kluczy przed naprawą zapytaniaNajbezpieczniej jest ustalić jeden typ dla każdej pary kolumn pełniących funkcję klucza głównego i klucza obcego. Obejmuje to nie tylko rodzaj danych, lecz także zakres wartości, długość pól tekstowych, kodowanie oraz zasady porównywania. Warto sprawdzić definicje obu tabel, wartości odstające i istniejące indeksy. Jeżeli klucz tekstowy zawiera liczby z wiodącymi zerami, zamiana go na liczbę zmieniłaby znaczenie danych, dlatego nie można podejmować takiej decyzji wyłącznie na podstawie podobnego wyglądu wartości. W serwisowym środowisku laptopa lub komputera PC diagnoza może polegać na porównaniu definicji tabel, analizie planu wykonania i pomiarze zapytania przed oraz po korekcie. Trzeba również sprawdzić warunki |