Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es möglich, einen funktionsbasierten Index in MySQL zu haben?

Nein, nicht im Allgemeinen, ich glaube nicht einmal, dass 5.6 (die neueste Version, als diese Antwort zum ersten Mal geschrieben wurde) diese Funktionalität hat. Es ist erwähnenswert, dass 8.0.13 und höher jetzt funktionale Indizes , sodass Sie ohne die unten beschriebene Triggermethode erreichen können, was Sie brauchen.

Wenn Sie eine ältere Version von mysql ausführen , es ist möglich, nur führend zu verwenden Teil einer Spalte (diese Funktionalität gibt es schon lange), aber keine, die beim zweiten oder nachfolgenden Zeichen beginnt, oder irgendeine andere komplexere Funktion.

Im Folgenden wird beispielsweise ein Index erstellt, der die ersten fünf Zeichen eines Namens verwendet:

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

Bei komplexeren Ausdrücken können Sie einen ähnlichen Effekt erzielen, indem Sie einen anderen verwenden Spalte mit den darin enthaltenen indexierbaren Daten, und verwenden Sie dann Insert/Update-Trigger, um sicherzustellen, dass sie korrekt gefüllt ist.

Abgesehen von der Platzverschwendung für redundante Daten ist das so ziemlich dasselbe.

Und obwohl es technisch gegen 3NF verstößt, wird dies durch die Verwendung von Triggern gemildert, um die Daten synchron zu halten (dies wird oft für zusätzliche Leistung getan).