2013-03-02 19 views

Odpowiedz

31

<> nie jest równy, jest taki sam jak !=

+0

To prawda, że ​​są funkcjonalnie takie same. Jednak sposób, w jaki optymalizator SQL ich używa, jest bardzo różny. = /! = są po prostu obliczane jako true/false, podczas gdy <> oznacza, że ​​silnik musi sprawdzić, czy wartość jest większa lub mniejsza niż, co oznacza więcej wydajności. Po prostu coś do rozważenia przy pisaniu zapytań, które mogą być drogie. –

+12

Nie wierzę, że stwierdzenie jest poprawne, operatory są funkcjonalnie równoważne, <> nie jest kombinacją < and >, jest odrębnym operatorem sam w sobie, a nie równym. Dlaczego optymalizator miałby się przejmować, gdyby był większy lub mniejszy od wartości? wystarczy sprawdzić, czy to nie jest równe. – steoleary

+3

Udowodniłem to w kilku przechowywanych procedurach, które mamy. Wszystko zależy od indeksów istniejących w tabeli. Kiedy używasz <>, wierzę, że silnik skanuje/szuka wszystkich wartości, które są większe lub mniejsze niż. Kiedy używamy! =, Po prostu idzie na wszystkie wartości, które nie są równe temu, co zdefiniowałeś. Widzieliśmy wzrost wydajności z 30 minut do 3 minut w kilku naszych procedurach tutaj. Ponownie, wszystkie środowiska/indeksy są różne, ale staramy się unikać używania operatorów <> w indeksowanych kolumnach, ponieważ nie są one SARGable. Zobacz: http://www.sql-server-pro.com/sql-where-clause-optimization.html –

7

To "nie równa się". Przejrzyj listę operatorów dla używanej bazy danych i znajdź odpowiednią sekcję (zwykle "operatory porównania"). Np

4

jest operator not equals. Zastosowanie:

select * 
from table 
where foo <> 0 
2

To nie Równe operator, ale mam zamiar być gadatliwy, aby moja odpowiedź pisał, bo nie weszły jeszcze wystarczająco dużo znaków.

1

<> oznacza nie równa samo jak !=

0

sprawdza, czy wartości dwa argumenty są równe, czy nie, jeśli wartości są równe, to stanie się prawdą. (a <> b) lub (a! = b) jest prawdziwe.

Powiązane problemy