回文:
私、5万語と大きなテーブルがあります。私は、動的な文字列で始まる単語を見つける必要があります。私は、文字列変数でLIKE演算子を使用する場合でも、クエリが長くなりすぎます。
たとえば、このクエリは1.3秒かかります。
set @pattern = 'f%';
select * from words where Word like @pattern limit 100;
次のクエリは、0.0秒かかります。
select * from words where Word like 'f%' limit 100;
しかし、両方のクエリは、同じ作業を行います。
要求は、持続時間が非常に異なっている理由は何だろうか?この差を解消するには?
回文:
これは、変数が持っているということになっutf8mb4
たcharset(私のデータベースのデフォルトの文字セットを)が、列はWord
持ってutf8
文字セットを。
だから、それを行うには、すべてのI必要が使用して変換文字セットでありますutf8
:
set @pattern = CONVERT('f%' USING utf8);
select * from words where Word like @pattern limit 100;