Вопрос: Самый быстрый способ проверить, существует ли какой-либо случай шаблона в столбце с использованием SQL


Я пытаюсь написать код, который позволяет мне проверить, есть ли какие-либо случаи определенного шаблона внутри таблицы.

То, как я сейчас делаю, - это что-то вроде

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

и если подсчет больше 0.

Мне любопытно узнать, есть ли способ ускорить этот процесс, поскольку этот тип поиска шаблонов происходит в цикле в моем запросе, и все, что мне нужно знать, - это хотя бы один такой случай, а не общее число случаев ,

Любые предложения будут оценены.

EDIT: Я запускаю это внутри хранимой процедуры Teradata для проверки качества данных.


6


источник


Ответы:


Если вам не нужен фактический подсчет, наиболее эффективный способ использования Teradata EXISTS:

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

Это вернет пустой набор результатов, если шаблон не существует.


2



С помощью EXISTS будет быстрее, если вам действительно не нужно знать, сколько совпадений есть. Что-то вроде этого будет работать:

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

Это быстрее, потому что, когда он находит одно совпадение, он может вернуть результат.


3



Что касается производительности, то лучший подход заключается в следующем:

  1. выберите набор результатов, основанный на вашем шаблоне;
  2. ограничьте размер набора результатов до 1.
  3. Проверьте, был ли возвращен результат.

Это не позволяет механизму базы данных выполнить полное сканирование таблицы, и запрос вернется, как только встретится первая соответствующая запись.

Фактический запрос зависит от используемой вами базы данных. В 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;

1