Supponiamo di avere una tabella che assomiglia a questo:Confronto byte byte per byte, che è più veloce? binario vs bin_collate
create table t1(c1 varchar(x)collate utf8mb4_general_ci, index(c1))
Per fare confronti di byte-sensibili, abbiamo praticamente abbiamo due modi (si presuppone che tutti stringhe rilevanti fanno spazi non sono finali, vale a dire che sono tutti padspace-compliant):
select*from t1 where c1 ='test'collate utf8mb4_bin
select*from t1 where c1 = binary'test'
Quale dovrebbe essere preferito quando le prestazioni sono di preoccupazione?
Quando si utilizza un indice di raccolta carattere non binario, è più veloce per compare con binary string o confronto binario?
(Aggiunta di una nuova colonna alla tabella solo per memorizzare l'equivalente binario di c1
è un grande successo per il magazzinaggio e non è possibile.)
(PS Gradirei una risposta che mette a confronto sia hash e confronti btree, anche se Sono principalmente interessato al confronto btree.)
Nel vostro test fino ad ora, che cosa hai trovato? –
aggiungere un indice a c1 potrebbe essere un miglioramento, se le prestazioni sono preoccupanti; inoltre, che tipo di valori possibili possono avere? potrebbero inserirsi in un enum? forse devi aggiungere una colonna con variante pre-elaborata di c1? – Ashalynd
Che i numeri siano bizzarri e abbastanza vicini da arrivare a qualsiasi conclusione utilizzando test unilaterali. @Ashalynd, L'indice è già 'utf8mb4_general_ci'. I valori memorizzati sono "parole inglesi" anche se gli utenti possono digitare caratteri casuali, anche caratteri cinesi. – Pacerier