使用SQL检查列中是否存在任何模式的最快方法
我正在尝试编写代码,允许我检查表中是否存在任何特定模式的情况 我目前的做法是使用SQL检查列中是否存在任何模式的最快方法,sql,performance,count,teradata,Sql,Performance,Count,Teradata,我正在尝试编写代码,允许我检查表中是否存在任何特定模式的情况 我目前的做法是 select count(*) from database.table where column like (some pattern) 并查看计数是否大于0 我很想知道是否有任何方法可以加快这个过程,因为这种类型的模式查找在我的查询中是在循环中发生的,我需要知道的是,是否有一个这样的案例,而不是案例总数 如有任何建议,将不胜感激 编辑:为了验证数据质量,我在Teradata存储过程中运行此操作。就性能而言,更好
select count(*)
from database.table
where column like (some pattern)
并查看计数是否大于0
我很想知道是否有任何方法可以加快这个过程,因为这种类型的模式查找在我的查询中是在循环中发生的,我需要知道的是,是否有一个这样的案例,而不是案例总数
如有任何建议,将不胜感激
编辑:为了验证数据质量,我在Teradata存储过程中运行此操作。就性能而言,更好的方法是:
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'
这会更快,因为一旦找到一个匹配项,它就可以返回一个结果。如果不需要实际计数,Teradata中最有效的方法将使用
EXISTS
:
select 1
where exists
( select *
from database.table
where column like (some pattern)
)
如果模式不存在,这将返回一个空结果集。您如何使用它?查询中的循环通常是一个坏符号。。。使用基于集合的方法而不是循环时,SQL工作得更好。更多的上下文将有助于给你一个好的答案。在发布你的问题时也指定你的RDBMS,因为不同的数据库有不同的功能。谢谢大家的评论。我应该解释得更清楚些。我在Teradata存储过程中使用这些查询,并尝试使用它对表进行数据质量检查。基本概念是使用循环遍历表中的各个列,并使用select count语句执行检查,以查看是否存在超出我们预期范围的情况。我认为使用IF-Exist可能会更好,如下所示,但我认为正常情况下是没有匹配项的情况。谢谢。实际上我的选择失败了。3706:语法错误:应在“')和“*”之间。运行此查询时。@HangilJang:当然失败了,应该没有
*
,我会修正我的答案