Percebi que o Ruby on Rails (ActiveRecord) estava usando o BINARY
operador para uma comparação com distinção entre maiúsculas e minúsculas. No entanto, quando olho EXPLAIN
para isso, o MySQL ainda pode usar o índice apropriado para uma coluna que não diferencia maiúsculas de minúsculas. Como isso é possível? Todas as colunas de texto são indexadas com distinção entre maiúsculas e minúsculas?
Sem BINARY
operador:
select_type: SIMPLE
table: my_table
type: const
possible_keys: my_table_unq,my_table_idx
key: my_table_unq
key_len: 771
ref: const,const
rows: 1
Extra: Using index
Com BINARY
operador:
select_type: SIMPLE
table: my_table
type: range
possible_keys: my_table_unq,my_table_idx
key: my_table_unq
key_len: 771
ref: NULL
rows: 1
Extra: Using where; Using index
Parece que o último está usando um intervalo.