JohnH pokrył część bardzo dobrze o tym, jak napisać zapytanie. Jest jeszcze jedna istotna kwestia, którą również należy wspomnieć, co jest charakterystyką wydajnościową takiego zapytania. Powtórzmy tutaj (dostosowany do Oracle):
SELECT EmployeeName FROM EmployeeTable WHERE LENGTH(EmployeeName) > 4;
To zapytanie jest ograniczenie wynik funkcji przyłożonego do wartości kolumny (w wyniku zastosowania funkcji LENGTH
do kolumny EmployeeName
). W Oracle i prawdopodobnie we wszystkich innych RDBMS oznacza to, że regularny indeks EmployeeName będzie bezużyteczny, aby odpowiedzieć na to zapytanie; baza danych wykona pełne skanowanie tabeli, co może być bardzo kosztowne.
Jednak różne bazy danych oferują funkcję indeksów indeksów, która ma na celu przyspieszenie takich zapytań. Na przykład w Oracle, można utworzyć indeks tak:
CREATE INDEX EmployeeTable_EmployeeName_Length ON EmployeeTable(LENGTH(EmployeeName));
To nie może jeszcze pomóc w twoim przypadku, jednak, ponieważ indeks może nie być bardzo selektywny dla swojej kondycji. Rozumiem przez to: pytasz o wiersze, w których długość nazwy jest większa niż 4. Przyjmijmy, że 80% nazw pracowników w tej tabeli jest dłuższych niż 4.Cóż, wtedy baza danych prawdopodobnie dokończy (poprawnie), że nie warto korzystać z indeksu, ponieważ prawdopodobnie i tak będzie musiała przeczytać większość bloków w tabeli.
Jeśli jednak zmieniono zapytanie, aby powiedzieć LENGTH(EmployeeName) <= 4
, lub LENGTH(EmployeeName) > 35
, zakładając, że tylko nieliczni pracownicy mają nazwy zawierające mniej niż 5 znaków lub więcej niż 35, indeks zostanie wybrany i poprawi wydajność.
Krótko mówiąc: należy wystrzegać się charakterystyk wydajności takich zapytań jak ten, który próbujesz napisać.
Czy to jest serwer sql? – JonH