Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е в MySQL да има индекс, базиран на функции?

Не, не в общ смисъл, не вярвам, че дори 5.6 (последната версия, когато този отговор беше написан за първи път) има тази функционалност. Струва си да се отбележи, че 8.0.13 и по-нови вече поддържат функционални индекси , което ви позволява да постигнете това, от което се нуждаете, без описания по-долу метод за задействане.

Ако използвате по-стара версия на mysql , е възможно е да се използват само водещите част от колона (тази функционалност съществува от дълго време), но не една, започваща от втория или следващите символи, или друга по-сложна функция.

Например, следното създава индекс, използвайки първите пет знака на име:

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

За по-сложни изрази можете да постигнете подобен ефект, като имате друг колона с индексируемите данни в нея, след което се използват тригери за вмъкване/актуализация, за да се гарантира, че е попълнена правилно.

Освен загубата на пространство за излишни данни, това е почти същото.

И въпреки че технически нарушава 3NF, това е смекчено от използването на тригери за поддържане на данните в синхронизиране (това е нещо, което често се прави за допълнителна производителност).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да се свържа с локален MySQL сървър чрез сокет '/var/mysql/mysql.sock' (38)

  2. Как да получите row_number в MySQL

  3. MIN/MAX спрямо ORDER BY и LIMIT

  4. Примери за ЛОКАЛНО ВРЕМЕ – MySQL

  5. Какъв е максималният размер на заявката за mysql?