2010-10-26 3 views
5

У меня есть следующий запрос:MySQL бинарного сравнения индекс использование оленья кожа

EXPLAIN EXTENDED SELECT * 
FROM (
`photo_data` 
) 
LEFT JOIN `deleted_photos` ON `deleted_photos`.`photo_id` = `photo_data`.`photo_id` 
WHERE photo_data.photo_id = 'UKNn' 
AND `deleted_photos`.`photo_id` IS NULL 

Я, к сожалению, придется использовать бинарный сравнить это photo_id (который вручают мне из другого вне службы). Так что я избегаю «укнн», который вытаскивается из базы данных вместо «UKNn».

Проблема в том, что когда я объясняю, я вижу, что использование двоичного файла не использует индекс. Если я вынимаю двоичный код, он использует индекс для photo_id. Есть ли способ использовать двоичную опцию и использовать с ней индекс?

ответ

4

MySQL использует параметры сортировки столбца для индекса. Индекс с не двоичной сортировкой не полезен для двоичного поиска, так как порядок может отличаться.

Вы можете изменить сам столбец в двоичные сортировки:

ALTER TABLE YourTable MODIFY 
    YourColumn VARCHAR(4) 
    CHARACTER SET latin1 
    COLLATE latin1_bin; 

Тогда индекс будет полезен для бинарного поиска.

2

Если вам нужно просто сравнить значение поля с учетом регистра, вы можете изменить настройку для этого поля.

ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_bin 

или

ALTER TABLE photo_data MODIFY photo_id VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_general_cs 
+0

есть ли способ принять ваш ответ? вы, ребята, имели одинаковый ответ почти одновременно –

Смежные вопросы