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 にインデックスが存在しません。そのため、何があっても完全なテーブル スキャンを実行する必要があります。