08 Aug

Mysql / MariaDB con lower() sugli indici da problemi di prestazioni

Per qualche giorno ho avuto problemi eseguendo alcune query con Join su una tabella contenente milioni di record. Le query bloccavano il server.  Premetto che tutte le ricerche e i join erano su colonne indicizzate. Erano qualcosa tipo:

SELECT *  FROM `61_traduzioni_frasi` AS `tf`
INNER JOIN `frasi` AS `f` ON f.id = tf.id_traduzione
INNER JOIN `lingue` AS `l` ON f.id_lingua = l.id
INNER JOIN `utenti` AS `u` ON f.id_utente = u.id
INNER JOIN `tipi_traduzione` AS `tt` ON tf.id_tipo_traduzione = tt.id
INNER JOIN `frasi` AS `f1` ON f1.id = tf.id_frase
INNER JOIN `lingue` AS `l1` ON f1.id_lingua = l1.id
INNER JOIN `utenti` AS `u1` ON f1.id_utente = u1.id
INNER JOIN `stati_moderazione` AS `sm` ON tf.id_stato_moderazione = sm.id WHERE (l.id = ‘1’ ) AND (l1.id = ‘2’ ) AND (LOWER(f1.testo) = ‘ciao’ ) AND (f.cancellato = ‘N’)

 

Read More