Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Что быстрее: WHERE IN ... или WHERE ... OR ... OR ...   Найти похожие ветки 

 
Геннадий   (2004-10-29 07:41) [0]

Необходимо проверить на присутствие/отсутствие в таблице некоторые элементы (~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) и каждая часть проверяется отдельным запросом. Если все запросы вернули нули - элементы уникальны.
Может подскажете иной, более быстрый вариант?


 
Anatoly Podgoretsky ©   (2004-10-29 07:43) [1]

Почему бы тебе не измерить?


 
Johnmen ©   (2004-10-29 09:17) [2]

>Может подскажете иной, более быстрый вариант?

Оба одинаково не будут проходить компиляцию.
50 000 это не то количество...:)

А вообще почитай теорию, про индексы там, про предикаты (IN и т.д.), про вычисление логических выражений...


 
VictorT ©   (2004-10-29 13:18) [3]

имхо, лучше создать таблицу, в которой будут эти элементы, которые нужно проверит.
И тогда запрос будет типа такого
select count(*) from table t where t.field in select  field from table2


 
Johnmen ©   (2004-10-29 13:29) [4]

>VictorT ©   (29.10.04 13:18) [3]

Совершенно верно.
А если пойти дальше, то и запрос сделать с соединением.
А если ещё дальше в суть вопроса, то проектировать надо грамотно, тогда и вопросов таких не будет.


 
AZDesign   (2004-10-29 13:57) [5]

Во-первых, вставляется как правило ОДИН элемент и его нужно проверить, или ты сливаешь две таблицы - но это другой вопрос.

Если это ОДИН элемент, то нужно уйти от текстового поля, так как сравнение текста много дольше чисел.
Преобразуй текстовое поле в уникальное число и проверяй уникальное число по интексу. Работает чрезвычайно быстро

Ну и проектирование структуры данных тоже много чего значит.
У меня таблица людей (уникальных) 600000 записей, последовательный поиск по фамилии - время отклика на ввод символа меньше секунды


 
Vemer ©   (2004-10-29 14:38) [6]

Часто Where IN успешно можно заменить на Where Exists..



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
3-1099162141
Мирон
2004-10-30 22:49
2004.11.28
Как узнать кол-во удаленных записей в процедуре


14-1099927764
ИМХО
2004-11-08 18:29
2004.11.28
Локомотив - чемпион?


1-1100177008
gonzales
2004-11-11 15:43
2004.11.28
Разложить файл на несколько частей


9-1091015986
Evgeniy_K
2004-07-28 15:59
2004.11.28
Параметры экрана


1-1100194243
xkiller
2004-11-11 20:30
2004.11.28
Копирование из Memo текста на русском