Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível ter índice baseado em função no MySQL?


Não, não em um sentido geral, não acredito que o 5.6 (a versão mais recente quando esta resposta foi escrita pela primeira vez) tenha essa funcionalidade. Vale a pena notar que a versão 8.0.13 e superior agora suportam índices funcionais , permitindo que você obtenha o que precisa sem o método de disparo descrito abaixo.

Se você estiver executando uma versão mais antiga do mysql , é é possível usar apenas o principal parte de uma coluna (essa funcionalidade existe há muito tempo), mas não uma que comece no segundo ou nos caracteres subsequentes, ou qualquer outra função mais complexa.

Por exemplo, o seguinte cria um índice usando os primeiros cinco caracteres de um nome:
create index name_first_five on cust_table (name(5));

Para expressões mais complexas, você pode obter um efeito semelhante com outro coluna com os dados indexáveis ​​nela e, em seguida, usando acionadores de inserção/atualização para garantir que ela seja preenchida corretamente.

Além do espaço desperdiçado para dados redundantes, é praticamente a mesma coisa.

E, embora tecnicamente viole a 3NF, isso é mitigado pelo uso de gatilhos para manter os dados sincronizados (isso é algo que geralmente é feito para aumentar o desempenho).