![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что быстрее: WHERE IN ... или WHERE ... OR ... OR ... [D6]
Геннадий © (2004-10-29 07:41:00)Необходимо проверить на присутствие/отсутствие в таблице некоторые элементы (~50 000, varchar(20)). Что отработает быстрее?
select count(*) from table t where t.field in ('', '', ..., '')
или
select count(*) from table t where t.field = '' or t.field = '' or ...
В таблицу добавляется информация, которая в рамках этой таблицы должна быть уникальной. Причём проверка выполняется отдельно, а не при добавлении - пользователь должен иметь возможность узнать возможно ли теоритически добавить данные в таблицу (даже если самого добавления не планируется). Программно эти 50 000 разбиваются на части (500) и каждая часть проверяется отдельным запросом. Если все запросы вернули нули - элементы уникальны.
Может подскажете иной, более быстрый вариант?
Vemer (2004-10-29 14:38:00) [1]Часто Where INуспешно можно заменить на Where Exists..
AZDesign (2004-10-29 13:57:00) [2]Во-первых, вставляется как правило ОДИН элемент и его нужно проверить, или ты сливаешь две таблицы - но это другой вопрос.
Если это ОДИН элемент, то нужно уйти от текстового поля, так как сравнение текста много дольше чисел.
Преобразуй текстовое поле в уникальное число и проверяй уникальное число по интексу. Работает чрезвычайно быстро
Ну и проектирование структуры данных тоже много чего значит.
У меня таблица людей (уникальных) 600000 записей, последовательный поиск по фамилии - время отклика на ввод символа меньше секунды
Johnmen (2004-10-29 13:29:00) [3]>VictorT © (29.10.04 13:18) [3]
Совершенно верно.
А если пойти дальше, то и запрос сделать с соединением.
А если ещё дальше в суть вопроса, то проектировать надо грамотно, тогда и вопросов таких не будет.
VictorT (2004-10-29 13:18:00) [4]имхо, лучше создать таблицу, в которой будут эти элементы, которые нужно проверит.
И тогда запрос будет типа такого
select count(*) from table t where t.field in select field from table2
Johnmen (2004-10-29 09:17:00) [5]>Может подскажете иной, более быстрый вариант?
Оба одинаковоне будут проходить компиляцию.
50 000 это не то количество...:)
А вообще почитай теорию, про индексы там, про предикаты (IN и т.д.), про вычисление логических выражений...
Anatoly Podgoretsky (2004-10-29 07:43:00) [6]Почему бы тебе не измерить?