Mysql
 sql >> Database >  >> RDS >> Mysql

Colonna di indicizzazione con funzione REPLACE in MySQL

Non esiste colonna calcolata in MySQL.

Se desideri formattare un valore per accelerare la ricerca nell'indice, probabilmente dovrai utilizzare un trigger. In effetti, stamattina ho risposto quasi alla stessa domanda:vedi https://stackoverflow.com /a/18047511/2363712 per un esempio simile.

Nel tuo caso, ciò porterebbe a qualcosa del genere:

CREATE TABLE `table_a`(`column_1` VARCHAR(255), ... ,
                       `column_1_fmt` VARCHAR(255),
                       INDEX(`column_1_fmt`));

CREATE TRIGGER ins_table_a BEFORE INSERT ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

CREATE TRIGGER upd_table_a BEFORE UPDATE ON `table_a`
FOR EACH ROW
    SET NEW.`column_1_fmt` = REPLACE(NEW.column_1, '-', '');

Ora utilizzerai column_1_fmt per cercare valori/unire su valori con il formato richiesto.

Riguardo al tuo bisogni speciali (rimuovendo trattini -- da una specie di numero seriale/di riferimento?). Forse dovresti invertire il problema. Memorizza quei valori come forma canonica (senza trattino). E aggiungi i trattini richiesti in SELECT tempo.