Nie, nie w sensie ogólnym, nie wierzę, że nawet 5.6 (najnowsza wersja, kiedy ta odpowiedź została napisana po raz pierwszy) ma taką funkcjonalność. Warto zauważyć, że wersja 8.0.13 i nowsze obsługują teraz indeksy funkcjonalne , co pozwala osiągnąć to, czego potrzebujesz, bez opisanej poniżej metody wyzwalania.
Jeśli używasz starszej wersji mysql
, to jest można używać tylko wiodącego część kolumny (ta funkcja istnieje już od dłuższego czasu), ale nie zaczyna się od drugiego lub kolejnych znaków, ani żadnej innej bardziej złożonej funkcji.
Na przykład, poniższy kod tworzy indeks przy użyciu pierwszych pięciu znaków nazwy:
create index name_first_five on cust_table (name(5));
W przypadku bardziej złożonych wyrażeń możesz osiągnąć podobny efekt, używając innego kolumnę z indeksowanymi danymi, a następnie za pomocą wyzwalaczy wstawiania/aktualizacji, aby upewnić się, że jest ona prawidłowo wypełniona.
Poza zmarnowaną przestrzenią na nadmiarowe dane, to prawie to samo.
I chociaż technicznie narusza to 3NF, jest to łagodzone przez użycie wyzwalaczy do utrzymywania synchronizacji danych (jest to często wykonywane w celu zwiększenia wydajności).