2010-10-26 10 views
5

Mam następujące zapytanie:mysql porównanie binarne Indeks użycie robi

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 

I niestety trzeba użyć binarny porównać tę photo_id (który jest przekazał do mnie z innej usługi na zewnątrz). Tak więc unikam "uknn" jest wyciągany z bazy danych zamiast "UKNn".

Problem polega na tym, że kiedy robię wyjaśnienia, widzę, że użycie binarnego nie używa indeksu. Jeśli wyjmę plik binarny, używa on indeksu dla photo_id. Czy istnieje sposób, aby móc korzystać z opcji binarnej i używać z nią indeksu?

Odpowiedz

4

MySQL używa porównania kolumny o indeksie. Indeks z sortowaniem niebinarnym nie jest przydatny do wyszukiwania binarnego, ponieważ kolejność może być inna.

Można zmienić samą kolumnę sortowania binarnego:

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

Następnie indeks byłby przydatny dla odnośnika binarnym.

2

Jeśli chcesz tylko porównać wartość pola z uwzględnieniem wielkości liter, możesz zmienić sposób sortowania dla tego pola.

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

lub

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

Czy istnieje sposób, aby zaakceptować swoją odpowiedź? mieliście tę samą odpowiedź niemal w tym samym czasie –