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ı?
(sadecec1
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.)
yapıyoruz nereye sorgulamaya
Cevap seçeneği 1 daha hızlı olacaktır? Performans endişe varsa, c1'e bir indeks eklemek –
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
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