使用 SQL 检查列中是否存在模式的任何情况的最快方法

Fastest way to check if any case of a pattern exist in a column using SQL

我正在尝试编写代码来检查 table.

中是否存在任何特定模式的情况

我目前的做法是

select count(*) 
from database.table 
where column like (some pattern)

并查看计数是否大于 0。

我很好奇是否有任何方法可以加快此过程,因为这种类型的模式查找在我的查询循环中发生,我需要知道的是是否存在这样的情况而不是案件总数。

如有任何建议,我们将不胜感激。

编辑:我在 Teradata 存储过程中 运行 进行数据质量验证。

在性能方面,更好的方法是:

  1. select根据您的模式设置的结果;
  2. 将结果集的大小限制为 1。
  3. 检查结果是否 returned。

这样做可以避免数据库引擎必须进行完整的 table 扫描,一旦遇到第一个匹配记录,查询就会 return。

实际查询取决于您使用的数据库。在 MySQL 中,它看起来像:

SELECT id FROM database.table WHERE column LIKE '%some pattern%' LIMIT 1;

在 Oracle 中它看起来像这样:

SELECT id FROM database.table WHERE column LIKE '%some pattern%' AND ROWNUM = 1;

如果您实际上不需要知道有多少匹配项,则使用 EXISTS 会更快。像这样的东西会起作用:

IF EXISTS (
    SELECT *
    FROM bigTbl
    WHERE label LIKE '%test%'
)
    SELECT 'match'
ELSE
    SELECT 'no match'

这样速度更快,因为一旦它找到一个匹配项,它就可以 return 一个结果。

如果您不需要实际计数,Teradata 中最有效的方法是使用 EXISTS:

select 1
where exists 
 ( select *
   from database.table 
   where column like (some pattern)
 )

如果模式不存在,这将return一个空结果集。