2015-05-26 2 views
1

Интересно, что разница с точки зрения производительности или использования ресурсов между предложением в SQL, где у меня есть WHERE фразу видаРазличия между ИЛИ состояние или в состоянии в SQL

WHERE VALUE IN (A,B,C .......) 

или

WHERE VALUE = A OR VALUE = B OR VALUE = C..... 

Мне интересно, потому что в Oracle Query я должен искать всю информацию, связанную с этими значениями. Я не могу создать временную таблицу. Я просто получаю их от внешнего источника. Сначала я, хотя я был бы так же прост, как положить их внутри предложения IN. Количество значений является переменным, но не ниже 3000. С другой стороны, я читал, что в Oracle существует предел для количества значений для каких-либо условий, но до сих пор я никогда не получал более 4000.

+1

Никакой разницы вообще –

+0

Я полагаю, это будет зависеть от типа используемого вами программного обеспечения базы данных. Если это действительно актуально для вас, вы должны пойти и измерить это с помощью оператора EXPLAIN или аналогичного. Затем вы увидите, выполняет ли синтаксический анализатор хорошую работу и обрабатывает оба значения. И: IN имеет явное преимущество, что вы можете использовать sub select вместо статических значений или переменное количество значений. – Marged

+0

Какие СУБД вы используете? –

ответ

1

Никакой разницы. внутри DB двигатель будет выравниваться, что IN список в OR эд стека состояния как

WHERE VALUE IN (A,B,C .......) 

получит уплощаются

WHERE VALUE = A OR VALUE = B ... 
+0

Они не сказали нам двигатель БД. –

+0

@MartinSmith. это правда, но в большинстве СУБД это так; по крайней мере, так я знаю в случае «MySQL», «SQL Server» и «NETEZZA» – Rahul

+0

. Ссылка в другом ответе показывает, что в MySQL они не совпадают. –

0

Они логически то же самое (в том, что они дают тот же результат) , но оптимизатор будет использовать только индекс (если он существует) для одного из значений из OR - эффективно не с использованием индекса (поскольку O (log n) + O (n) = O (n)).

По моему опыту, когда вы ищете способы повысить производительность запросов, одна из первых вещей, которые я делаю, это преобразовать ORs в столбец в один IN (что обычно имеет большой эффект).

Смежные вопросы