2010-12-07 2 views
2

Название говорит само за себя. Первый запрос -Каковы различия между этими двумя запросами

SELECT * 
FROM  table _t 
WHERE  (id1, id2, id3, id4) <> (x1, x2, x3, x4) 

второй запрос -

SELECT * 
FROM  table_t 
WHERE  NOT 
      (id1 = x1 AND 
      id2 = x2 AND 
      id3 = x3 AND 
      id4 = x4) 

Каковы различия между этими двумя запросами (т.е., есть ли прирост производительности/потеря или что-то)?

Редактировать

Всем тем, кто думает, что я шучу или что-то, я просто хочу сказать, что я использовал оба запроса в PostgreSQL 8.4. Оба вопроса работают нормально.

+0

Yikes! Я не знал о первом синтаксисе. Это MySql? – ClosureCowboy 2010-12-07 06:53:08

+0

Любая разница в производительности, вероятно, зависит от механизма базы данных. – 2010-12-07 06:59:29

+1

@ Lieven - они называются конструкторами строк. Они находятся в стандартном SQL и постепенно заполняются в MS SQL Server - например, теперь вы можете указать несколько строк в предложении VALUES в INSERT, используя конструкторы строк. – 2010-12-07 07:27:22

ответ

1

Я бы не ожидал, что между этими двумя запросами будет какая-то разница, но это действительно зависит от оптимизатора для вашей СУБД. Возможно, одна из этих форм не позволяет оптимизатору «видеть» возможность использовать индекс, который нет в другой форме.

Как @Jinesh говорит, что вам лучше использовать любые средства, доступные в вашей СУБД, для изучения планов, которые оптимизатор производит в этих случаях.

2

Пользователь Объясните план, чтобы узнать это.

1

Производительность изменится, если у вас есть индексы на id s и x.

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