使用 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 存储过程中 运行 进行数据质量验证。
在性能方面,更好的方法是:
- select根据您的模式设置的结果;
- 将结果集的大小限制为 1。
- 检查结果是否 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一个空结果集。
我正在尝试编写代码来检查 table.
中是否存在任何特定模式的情况我目前的做法是
select count(*)
from database.table
where column like (some pattern)
并查看计数是否大于 0。
我很好奇是否有任何方法可以加快此过程,因为这种类型的模式查找在我的查询循环中发生,我需要知道的是是否存在这样的情况而不是案件总数。
如有任何建议,我们将不胜感激。
编辑:我在 Teradata 存储过程中 运行 进行数据质量验证。
在性能方面,更好的方法是:
- select根据您的模式设置的结果;
- 将结果集的大小限制为 1。
- 检查结果是否 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一个空结果集。