sql >> Database teknologi >  >> RDS >> Mysql

Er det muligt at have funktionsbaseret indeks i MySQL?

Nej, ikke i generel forstand, jeg tror ikke engang 5.6 (den seneste version, da dette svar blev skrevet første gang) har denne funktionalitet. Det er værd at bemærke, at 8.0.13 og nyere nu understøtter funktionelle indekser , så du kan opnå det, du har brug for, uden triggermetoden beskrevet nedenfor.

Hvis du kører en ældre version af mysql , det er muligt kun at bruge førende del af en kolonne (denne funktionalitet har eksisteret i lang tid), men ikke en, der starter ved det andet eller efterfølgende tegn, eller nogen anden mere kompleks funktion.

For eksempel opretter det følgende et indeks ved hjælp af de første fem tegn i et navn:

create index name_first_five on cust_table (name(5));

For mere komplekse udtryk kan du opnå en lignende effekt ved at have et andet kolonne med de indekserbare data i, og brug derefter insert/update triggers for at sikre, at den er udfyldt korrekt.

Bortset fra den spildte plads til overflødige data, er det stort set det samme.

Og selvom det teknisk overtræder 3NF, afbødes det af brugen af ​​triggere til at holde dataene synkroniseret (dette er noget, der ofte gøres for at øge ydeevnen).



  1. Valg af en float i MySQL

  2. hvordan kan jeg opdatere top 100 poster i sql server

  3. datetime2 vs datetimeoffset i SQL Server:Hvad er forskellen?

  4. 4 måder at kontrollere en kolonnes datatype i MySQL