Быстрый способ сравнить VARCHAR с другими - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть обработка в базе данных, которая перебирает всю таблицу.В какой-то момент мне нужно проверить, соответствует ли VARCHAR какое-либо значение в столбце.

Я хочу знать, какой быстрый способ сделать это.Есть ли сравнение SQL каждый раз?Получить значения таблицы в VARCHAR array?Другое решение?

Количество итераций в таблице превышает миллионы, поэтому сравнение будет выполняться миллион раз.В таблице соответствий есть несколько сотен значений.

Итак, каков наилучший подход для этого?

1 Ответ

2 голосов
/ 14 декабря 2011

Иметь индекс в столбце varchar в маленькой таблице.Тогда поиск будет максимально быстрым.Простой индекс btree (по умолчанию) подходит для оператора равенства.

CREATE INDEX smalltbl_lookup ON smalltbl(lookup);

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

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup)

В результатеиндексный поиск.Если вы посмотрите все значения (не похоже на ваш), LEFT JOIN будет быстрее:

SELECT *
FROM bigtbl b
LEFT JOIN smalltbl s USING (lookup)

Преобразование значений из маленькой таблицы в массив и проверка там не могут конкурировать с поиском по индексу.

...