In MySql, voglio individuare i record in cui il valore di stringa in una delle colonne inizia con (o è uguale a) una stringa di query. La colonna è indicizzata con l'ordine di confronto appropriato. Non c'è però un indice di ricerca full-text sulla colonna.In MySql, trovare stringhe con un prefisso dato
Una buona soluzione:
utilizzare l'indicesulla colonna. Le soluzioni che devono scorrere tutti i record nella tabella non sono sufficienti (diversi milioni di record nella tabella)
Lavorare con stringhe con qualsiasi valore di carattere. Alcuni dei valori delle colonne contengono caratteri di punteggiatura. La stringa di query potrebbe anche. Tienilo a mente se la tua soluzione include caratteri regex o simili. Le stringhe sono codificate in UTF-8, ma se la tua soluzione funziona solo con ASCII potrebbe comunque essere utile.
Il più vicino ho a questo punto è
SELECT * FROM TableName WHERE ColumnName BETWEEN query AND <<query+1>>
Dove <<query+1>>
viene pre-calcolata per seguire lessicograficamente query
nell'ordine collazione. Ad esempio, se è "o hai", allora <<query+1>>
è "o haj".
Perfetto - grazie. EXPLAIN indica infatti una query di intervallo. I documenti MySql per LIKE indicano che devono essere sfuggiti solo i seguenti caratteri: '%', '_': http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like . –
Potrei menzionare che nel caso in cui le cardinalità dell'indice debbano essere aggiornate, 'ANALYZE TABLE' è in teoria più veloce di' OPTIMIZE TABLE'. La tabella è ancora bloccata per scrivere durante questo tempo, però. Eseguire ANALYZE TABLE su un mio tavolo con ~ 6 milioni di file è durato un'ora buona. – Crast