SQL:like v.equals 性能比较

SQL: like v. equals performance comparison

我有一个很大的 table(1 亿行),它在传统的 RDBMS 系统(Oracle、MySQL、Postgres、SQL 服务器等)中正确地建立了索引。我想执行一个 SELECT 查询,可以使用以下任一条件选项来制定:

可以用一个标准表示的:

LIKE "T40%" 

由于通配符,它​​只在字符串字段的开头查找匹配项

需要包含 200 条确切标准的列表:

WHERE IN("T40.x21","T40.x32","T40.x43")

等等

其他条件相同。我应该期望哪个性能更高?

假设两个查询 return 同一组行(即您在 IN 表达式中提供的项目列表是详尽无遗的)您应该期望几乎相同的性能,也许有一些优势对于 LIKE 查询。

  • RDBMS 引擎一直在使用索引搜索开始于 LIKE 查询,因此 LIKE 'T40%' 将在索引搜索后生成记录
  • 您的 IN 查询也将针对索引搜索进行优化,可能会为 RDBMS 提供更严格的下限和上限。但是,将有一个额外的过滤步骤来消除 IN 列表之外的记录,这是在假设所有行无论如何都会被 returned 的情况下浪费 CPU 个周期。

如果您将查询参数化,第二个查询将更难从您的主机程序传递到 RDBMS。在所有其他条件相同的情况下,我会使用 LIKE.

我建议使用 LIKE 运算符,因为 ESCAPE OPTION 必须与 '\' 符号一起使用以增加字符串的精确匹配度。