sql >> Databasteknik >  >> RDS >> Mysql

Är det möjligt att ha funktionsbaserat index i MySQL?

Nej, inte i generell mening, jag tror inte ens 5.6 (den senaste versionen när detta svar först skrevs) har denna funktionalitet. Det är värt att notera att 8.0.13 och senare nu stöder funktionella index , så att du kan uppnå det du behöver utan triggermetoden som beskrivs nedan.

Om du kör en äldre version av mysql , det är möjligt att endast använda ledande del av en kolumn (denna funktion har funnits länge), men inte en som börjar med det andra eller efterföljande tecknen, eller någon annan mer komplex funktion.

Till exempel, följande skapar ett index med de första fem tecknen i ett namn:

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

För mer komplexa uttryck kan du uppnå en liknande effekt genom att ha ett annat kolumn med de indexerbara data i den och använd sedan insert/update triggers för att säkerställa att den fylls i korrekt.

Förutom det bortkastade utrymmet för redundant data är det ungefär samma sak.

Och även om det tekniskt sett bryter mot 3NF, mildras det genom användningen av triggers för att hålla data synkroniserade (detta är något som ofta görs för ökad prestanda).



  1. Kombinera flera underordnade rader till en rad MYSQL

  2. Varför blir funktioner med skalär värde i SQL Server långsammare?

  3. TNS-12519 utan maximala processer uppnådda

  4. SQL Server Backup Check