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 必须与 '\' 符号一起使用以增加字符串的精确匹配度。
我有一个很大的 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 必须与 '\' 符号一起使用以增加字符串的精确匹配度。