sql >> Databáze >  >> RDS >> Mysql

Je možné mít v MySQL index založený na funkcích?

Ne, ne v obecném smyslu, nevěřím, že ani 5.6 (nejnovější verze, kdy byla tato odpověď poprvé napsána) má tuto funkci. Stojí za zmínku, že verze 8.0.13 a vyšší nyní podporují funkční indexy , což vám umožní dosáhnout toho, co potřebujete, bez níže popsané metody spouštění.

Pokud používáte starší verzi mysql , to je možné použít pouze hlavní část sloupce (tato funkce existuje již dlouhou dobu), ale nikoli jedna začínající na druhém nebo následujících znacích, ani žádná jiná složitější funkce.

Například následující vytvoří rejstřík pomocí prvních pěti znaků názvu:

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

U složitějších výrazů můžete podobného efektu dosáhnout pomocí jiného sloupec s indexovatelnými daty v něm a poté pomocí spouštěčů vložení/aktualizace, aby bylo zajištěno jeho správné vyplnění.

Kromě plýtvání prostorem pro nadbytečná data je to v podstatě to samé.

A ačkoli to technicky porušuje 3NF, je to zmírněno používáním spouštěčů, které udržují data v synchronizaci (toto je něco, co se často dělá pro vyšší výkon).



  1. IS NOT NULL test pro záznam nevrací hodnotu TRUE, když je nastavena proměnná

  2. Propojené servery Salesforce.com a sp_columns_ex

  3. Varování Počet přečtených řádků / Skutečné přečtení řádků v Průzkumníku plánů

  4. Co je @@SERVICENAME na serveru SQL?