Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

Что быстрее: 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.032 c
3-1099032577
Miss
2004-10-29 10:49
2004.11.28
TUpdateSQL


3-1098963968
malamba
2004-10-28 15:46
2004.11.28
запрос с параметрами в Access через Delphi


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


11-1082957420
earl Grey
2004-04-26 09:30
2004.11.28
Автоматически ломается KOL - проект


1-1100457493
m.alex
2004-11-14 21:38
2004.11.28
Помогите сделать список обьектов некоторого класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский