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