我有几个表需要获取与 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 列上不存在索引。所以无论如何它都需要进行全表扫描。