2014-10-19 16 views
5

vs ikili biz şuna benzer bir tablo var varsayalım: bayt duyarlı karşılaştırmalar yapmak içinMySQL byte-for-byte karşılaştırması daha mı hızlı? bin_collate

create table t1(c1 varchar(x)collate utf8mb4_general_ci, index(c1)) 

, temelde tüm ilgili dizeleri sondaki değil alanlarda yapmak varsayalım iki yol (var yani bunlar hepsi padspace-compliant):

select*from t1 where c1 ='test'collate utf8mb4_bin 

select*from t1 where c1 = binary'test' 

performans endişe olduğunda tercih edilmelidir hangisi?

İkili olmayan bir karakter harmanlaması indeksini kullanırken, binary string ile hızlı mı yoksa ikili harmanlama mı?

(sadece c1 ikili eşdeğeri saklamak için tabloya yeni bir sütun ekleme depolama ve olası değil büyük bir isabet.)

karma ve btree karşılaştırmalar hem karşılaştırır bir cevap seviniriz

(PS, her ne kadar Öncelikle btree karşılaştırmasıyla ilgileniyorum.)

+1

yapıyoruz nereye sorgulamaya

select * from t1 where c1 = binary 'test' 

Cevap seçeneği 1 daha hızlı olacaktır? Performans endişe varsa, c1'e bir indeks eklemek –

+0

bir iyileştirme olabilir; ayrıca, ne tür olası değerler olabilir? Enum'a sığabilecekler mi? Belki de c1'in önceden işlenmiş varyantı olan bir sütun eklemelisiniz? – Ashalynd

+0

Sayılar ilginç ve tek taraflı testler kullanarak herhangi bir sonuca ulaşmak için yeterince yakın. @Ashalynd, Dizin zaten utf8mb4_general_ci'. Saklanan değerler "ingilizce kelimeler" dir, ancak kullanıcılar buna rasgele karakterler yazabilir, hatta Çince karakterler bile. – Pacerier

cevap

0

Tabloda indeksiniz bulunduğundan, ikili eşleşme için, sütun için değil sabit için ikili kullanın. Bu, seçeneklerin her ikisinden de daha hızlı olacaktır. Eğer ne buldun, bugüne kadarki testlerde

WHERE c1 collate utf8mb4_bin='test' 
+0

Bahşiş için teşekkürler, dökümünü sağ tarafa koymak için soruyu güncelledim (sol tarafın aksine). Her iki durum için de sağ taraftaki döküm ile, ikili dizgeye daha hızlı dökülüyor mu veya ikili harmanlamaya daha hızlı dökülüyor mu? – Pacerier

+0

Tamam..Great .. Bu durumda Harmanlama daha hızlı olacaktır. Ama ben 'test' (sondaki boşluk ile) gibi değerleri hariç tutacak ve harmanlamayı içereceği için ikiliyi tercih ederim. Ancak gereksiniminiz de 'test' içermesi gerekiyorsa harmanlama –

+0

ile devam edin Bir karakterin ikili dönüşümü, bir varchar değerinin harmanlanmış binary'sinden daha fazla yer alır. Bu bağlantı yardımcı olabilir. [link] (http://dev.mysql.com/doc/refman/5.0/en/charset-binary-collations.html) –