我有一个大表(1亿行),它在传统的RDBMS系统(Oracle,MySQL,Postgres,SQL Server等)中正确索引。 我想执行一个 SELECT 查询,可以使用以下任一条件选项进行表述:
一个可以用单个标准表示的标准:
LIKE "T40%"
由于通配符,它仅在字符串字段的开头查找匹配项
或
一个需要列出200个确切标准
:WHERE IN("T40.x21","T40.x32","T40.x43")
等。
在所有其他条件相同的情况下。我应该期望哪个性能更高?
假设两个查询返回相同的行集(即您在IN
表达式中提供的项目列表是详尽的),您应该期望几乎相同的性能,也许对LIKE
查询有一些优势。
- RDBMS 引擎一直在使用索引搜索进行 begins-with
LIKE
查询,因此LIKE 'T40%'
将在索引搜索后生成记录 - 您的
IN
查询也将针对索引搜索进行优化,可能会为 RDBMS 提供更严格的下限和上限。但是,将有一个额外的筛选步骤来消除IN
列表之外的记录,在假设无论如何都会返回所有行的情况下,这是对 CPU 周期的浪费。
如果您要参数化查询,则第二个查询将更难从主机程序传递给RDBMS。在所有其他条件相同的情况下,我会使用LIKE
.
我建议使用 LIKE 运算符,因为 ESCAPE 选项必须与"\"符号一起使用,以增加字符串的精确匹配。