Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 3
Регистрация: 27.03.2012
Сообщений: 2
1

Что быстрее WHERE x=1 или WHERE x IN (1)?

29.10.2007, 01:29. Просмотров 2196. Ответов 9
Метки нет (Все метки)


Есть какие-нибудь сведения насчет данных команд WHERE x=1 или WHERE x IN (1)? Вопрос в том, что есть некая функция, в которой выполняется запрос с параметрами, обычно значение x только одно, но бывает когда надо сделать WHERE x IN (1,2,3)... Так вот стоит ли делать 2 разные функции или использовать только IN? (Речь идет о наибольшей производительности).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2007, 01:29
Ответы с готовыми решениями:

Оптимизация кода, структуры базы, или что еще можно сделать что бы быстрее работало!?
Всем привет! Господа, выручайте. Не пойму как еще оптимизировать... Есть куча связанных таблиц....

Что быстрее: i++ или ++i ?
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это?...

Что быстрее 7 или XP?
Есть нетбук Acer Aspire One D257 с параметрами: Производитель:...

Что быстрее assembler или c++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++...

9
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
29.10.2007, 09:44 2
Без всяких сомнений стоит. Операция IN одна из самых медленных. Вообще для SQL Server'а, где только возможно надо использовать int и операцию =
0
YURA
29.10.2007, 10:11 3
Проверял на MSSQLServer 7.0
Исполнял пакетник на 1000000 последовательных выборок из 50000 индексированной таблицы.
Разницы почти нет.
= - 1:53, 1:44, 1:47
in - 1:47, 1:47, 1:58

В доках явно эквивалентность при разоре для IN() и набора OR не указана
IN действительно работает медленнее (по сравнению c JOIN ~ WHERE). Ес-но, - работают разные алгоритмы. И даже просто поразмыслив - вполне можно понять что для наборов заранее неизвестной длины IN будет во многих(но не во всех) случаях покрайней мере не быстрее WHERE.

Здесь ситуация насколько я понял несколько иная.
Вопрос скорее в том, как DBMS анализирует такие условия. И если в доках это конкретно не оговорено(как в случае с JOIN ~ WHERE), то я ни сколько не удивлюсь, что при разборе x=1 предварительно сведется системой к частному случаю x in (...) :o)
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
29.10.2007, 10:27 4
Несколько замечаний 4YURA:
причем здесь сравнение Join и Where
речь идет об x=1, ясно что такое условие в join не вынесешь :-).
Я больше чем уверен, что x=1 никогда ни один сервер не будет сводить к in (1) это была бы самая страшная глупость со стороны разработчиков. Наобород x in (a,b,c,..) сводится к набору типа x=a or x=b or x=c ...
Хотя на самом деле все несколько сложнее :-)
Если вы решили проверить быстродействие, то дайте серверу поработать больше 1.5 секунд.
С уважением, AndreP.
0
YURA
29.10.2007, 10:35 5
2AndreP
1:53 = 1 минута + 53 секунды
А при работе с мелкософтовскими разработками я почему-то уже ни в чем не уверен...
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
29.10.2007, 10:46 6
?
= - 1:53, 1:44, 1:47
in - 1:47, 1:47, 1:58

какие конкретно операторы сравнивались ?
0
YURA
29.10.2007, 11:17 7
SQL
1
2
3
4
5
6
7
8
9
10
11
12
DECLARE @i INT,@j INT 
SET @i=1
DECLARE @d datetime
SELECT top 1 @j=[Поле] FROM [Колесо]
SET @d=getdate()
while @i<1000000
BEGIN
SELECT @j=[Поле] FROM [колесо] WHERE [Поле] = @j
--select @j=[Поле] from [колесо] where [Поле] in (@j)
SET @i=@i+1
END
SELECT getdate()-@d
0 / 0 / 1
Регистрация: 22.07.2007
Сообщений: 260
29.10.2007, 12:06 8
Если посмотреть в QA Execution Plan (Filter), то видно, что in приводиться к = и OR, поэтому в случае с
select @j=[Поле] from [колесо] where [Поле] = @j
select @j=[Поле] from [колесо] where [Поле] in (@j)
разницы и не заметно, но это происходит не всегда. Иногда почему то Server начинает приводить in к конструкциям с BEETWEN (повидимому это определяется наличием/отсутствием кластерных индексов) тогда разница по времени появиться.
0
YURA
29.10.2007, 12:28 9
Уступаю сильнейшим...
select @j=[Поле] from [колесо] a inner join [колесо] b on a.[Поле] = @j and b.[Поле]=a.[Поле]
Sacha
04.11.2007, 14:00 10
На первоначальный вопрос...

Проверяйте на скорость - единственный вариант что-то узнать
Для себя я определился следующим образом:

= много быстрее чем in, просто иногда нужен список
or лучше не использовать вообще никогда
наконец:
any значительно быстрее чем in, а по функциональности тоже самое - т.е. всегда стоит использовать его
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2007, 14:00

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

Contains или Count, что быстрее?
Есть DbSet&lt;Countries&gt;. Нужно при добавлении новой страны в DbSet проверить есть ли уже такая. Что...

Что быстрее - 2 планки по 8 ГБ или 4 по 4 ГБ?
Собственно, собирается не разгоняемая система из Intel Core i5-4670, ASUS LGA1150 B85-PLUS и...

if или switch? что быстрее
Здравствуйте. Подскажите пожалуйста,что быстрее будет выполняться много условий if ,или switch ...

Что быстрее, while или foreach?
Что быстрее , while или foreach?

Что быстрее - Java или C#
1) C# быстрее Java? 2) C# легче Java? 3) Что лучше подходит для web: Java или C#?

Что быстрее, курсор или While?
Всем привет! Интересует вопрос, что быстрее в плане исполнения: Курсор или While? И зависит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.