Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy możliwe jest posiadanie indeksu opartego na funkcjach w MySQL?

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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usługa bazy danych MySQL — nowe innowacje HeatWave

  2. mySQL ::wstawić do tabeli, dane z innej tabeli?

  3. Posiadanie kolumn znaczników czasu utworzenia i ostatniej aktualizacji w MySQL 4.0

  4. Wyniki MySQL jako lista oddzielona przecinkami

  5. Zapytanie SQL wielu wartości w jednej komórce