MYSQL。私は、変数を使用している場合LIKEクエリ長くなりすぎます

回文:

私、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;

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=395525&siteId=1