sql >> Database >  >> RDS >> Mysql

Is het mogelijk om een ​​op functies gebaseerde index in MySQL te hebben?

Nee, niet in algemene zin, ik geloof niet dat zelfs 5.6 (de laatste versie toen dit antwoord voor het eerst werd geschreven) deze functionaliteit heeft. Het is vermeldenswaard dat 8.0.13 en hoger nu functionele indexen , zodat u kunt bereiken wat u nodig heeft zonder de hieronder beschreven triggermethode.

Als u een oudere versie van mysql gebruikt , het is mogelijk om alleen de leidende . te gebruiken deel van een kolom (deze functionaliteit bestaat al heel lang), maar niet een die begint bij de tweede of volgende tekens, of een andere, meer complexe functie.

Het volgende maakt bijvoorbeeld een index met de eerste vijf tekens van een naam:

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

Voor complexere uitdrukkingen kunt u een soortgelijk effect bereiken door andere . te gebruiken kolom met de indexeerbare gegevens erin en gebruik vervolgens triggers voor invoegen/bijwerken om ervoor te zorgen dat deze correct worden ingevuld.

Afgezien van de verspilde ruimte voor overtollige gegevens, is dat ongeveer hetzelfde.

En hoewel het technisch gezien in strijd is met 3NF, wordt dat verzacht door het gebruik van triggers om de gegevens gesynchroniseerd te houden (dit wordt vaak gedaan voor extra prestaties).



  1. Hoe RPC Out in te schakelen met T-SQL

  2. Django-formulier om database (modellen) op te vragen

  3. Wat is beter in MYSQL count(*) of count(1)?

  4. Tips voor een beter databaseontwerp