1

foo に関連するデータを取得する必要があるテーブルがいくつかあります。テーブルのサイズは約 10^8 行です。

したがって、列に部分文字列「foo」が含まれるすべての行をこれらのテーブルから取得する必要があります。

select * from bar where my_col like '%foo%';

これが遅いことはわかっているので、可能な値を確認します。

select distinct my_col from bar where my_col like '%foo%';
-- => ('xx_foo', 'yy_foo', 'xx_foo_xx', 'foo' ... 'xx_foo_yy')

可能な値の数は 3 ~ 20 の間です。

'%foo%' は実際どのくらい遅いのでしょうか?

select * from bar where my_col like '%foo%';
-- or
select * from bar where my_col in('foo', 'xx_foo' ... 'foo_yy'); -- list_size = 20

いつ何を使用するかに関する一般的なルールはありますか、またはさまざまなケースで速度をテストすることが唯一の方法ですか?

編集:私はテーブルを所有しておらず、列 foo にインデックスが存在しません。そのため、何があっても完全なテーブル スキャンを実行する必要があります。

4

2 に答える 2