2010-02-26 18 views
13

Które z nich lepiej wykorzystać w odniesieniu do wydajności? ... w odniesieniu do czytelności/zrozumiałości? ... w odniesieniu do zaakceptowanych standardów?SQL gdzie pole w vs. gdzie pole = z wieloma orami?

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

LUB

SELECT * 
FROM Wherever 
WHERE Greeting = 'hello' 
    OR Greeting = 'hi' 
    OR Greeting = 'hey' 

Pierwszy wydaje się bardziej intuicyjne/dla mnie jasne, ale jestem pewien, z przyjętymi standardami i wydajności.

Odpowiedz

14

ona bardziej czytelna i bardziej uniwersalnie akceptowane zrobić:

SELECT * 
FROM Wherever 
WHERE Greeting in ('hello', 'hi', 'hey') 

Wszystkie nowoczesne serwery SQL optymalizacji zapytań, więc oboje mogą być zmieniane w tym samym kodem, który działa na serwerze, tak różnice w wydajności będą nieznaczne lub nieistniejące.

Edit:

Widocznie opcja in jest szybsze, gdyż ocenia się odnośnika binarnym, natomiast wielokrotny = tylko evaulates każde stwierdzenie indywidualnie.

+0

Nie jestem pewien, czy jest bardziej akceptowalny, ale gramatyka IN jest z pewnością bardziej czytelna.Spójrz na "pozdrowienia jest na tej liście" w porównaniu do "pozdrowienia jest to lub pozdrowienia jest to, że lub pozdrowienia jest jakaś inna rzecz" – David

0

powiedziałbym pierwsza opcja wymagająca in:

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

Jest:

  • znacznie szybciej
  • łatwiejsze do odczytania
  • nie trzeba używać wielokrotność or
  • mniej wpisując:
  • łatwiejsze do utrzymania w dużych zapytań
  • szeroko stosowane

więcej rzeczy:

SQL IN Directive Much Faster Than Multiple OR Clauses

+0

To łącze nie porównuje jak dla jak na poziomie SQL. Porównuje wydajność listy zapętleń/wartości CF. – gbn

0

brzmieniu jest znacznie jaśniejsze, a ponieważ jest to jeden termin, unika możliwość brakujących lub nieprawidłowo ułożonych nawiasów, jeśli dodasz inne warunki do klauzuli WHERE.

Ponadto wierzę, że więcej implementacji SQL zoptymalizuje wersję IN przy założeniu, że indeks jest dostępny.

4

Wszystkie główne silniki (MySQL, PostgreSQL, Oracle i SQL Server) zoptymalizują ją do dokładnie tych samych planów.

2

Wydajność = identyczna.

Czytelność = "IN"

+1

ah- ... anonimowy downvote bez komentarza ... – gbn

Powiązane problemy