2010-04-09 4 views
6

w odniesieniu do kolejności wykonywania instrukcji w SQL, jest jakaś różnica między poniższym Wydajność mądry?T/SQL Efektywność i kolejność wykonywania

SELECT * FROM Persons 
WHERE UserType = 'Manager' AND LastName IN ('Hansen','Pettersen') 

I:

SELECT * FROM Persons 
WHERE LastName IN ('Hansen','Pettersen') AND UserType = 'Manager' 

Jeśli nie ma żadnej różnicy, czy jest może link itd., Które mogą mieć gdzie można dowiedzieć się więcej na ten temat?

Dzięki za tonę

Kyle

+0

Nie, ponieważ nie ma wpływu na kolejność wykonywania. – RBarryYoung

Odpowiedz

4

optymalizator, ponieważ korzysta z optymalizatora opartego kosztów, który zadecyduje „droga” jest najlepiej: to będzie kosztować opcje oparte na statystykach i następnie go stamtąd. Kolejność terminów nie powinna mieć znaczenia (chociaż sposób zagnieżdżania rzeczy może mieć znaczenie).

EDIT: Oracle używane mieć - do niedawna - optimizer regułowy (RBO), ale że has now been phased out. Ponieważ usługa RBO nie wyłączyła statystyk, można było zobaczyć różnice w planach zapytań w zależności od kolejności predykatów.

0

We wszystkich głównych baz danych SQL, nie ma różnicy.

+0

Znalazłem to interesujące w odniesieniu do Oracle, gdzie może to zrobić niewielką różnicę. http://www.dba-oracle.com/Oracle_tips_sql_predicate_order.htm – brydgesk

0

Nie ma żadnej różnicy. Oba będą skutkować tym samym planem wykonania.

2

Nie będzie różnicy. Możesz przeciągnąć zapytanie do góry w SQL Server i kliknąć ikonę Wyświetl szacunkowy plan wykonania i sprawdzić plan wykonania dla dwóch zapytań. Powinny być identyczne.

1

dodam następujące link.

planu kwerend wybiera się na podstawie statystyk na stole i indeksów zaangażowanych (biorąc pod uwagę działania, które muszą być wykonane). To, czy wybrany plan wykonania kwerendy jest najlepszy zależy od wielu czynników - ale odpowiedź na twoje pytanie jest taka, że ​​MS SQL wytworzy ten sam plan niezależnie (rozważy najlepszą kolejność dla wszystkich trzech warunków i znajdzie taki sam wynik w końcu).

Należy jednak zauważyć, że planiści nie są idealni i szacują jedynie koszt, więc w niektórych przypadkach (podając szczegółowe informacje o ograniczeniach związanych z planowaniem kwerendy) możliwe jest przepisanie warunków zapytania, aby pomóc planista zobaczy lepszą ścieżkę.

to (jeśli w ogóle możliwe) powinny być wykonywane tylko w przypadku zapytań, które okazały się kluczowe, a także pamiętać, że tego rodzaju optymalizacja może spowolnić, gdy zmiana danych statystyki.

Ponadto, w większości przypadków nie są lepsze sposoby (zmiana indeksów) w celu optymalizacji zapytań, co powinno być pozostawione do projektanta zapytań.

Jednym z głównych punktów RDBMS był , a nie, aby określić sposób pobierania danych (deklaratywny charakter zapytań). W większości przypadków dzisiejsi planiści zapytań znajdą dla Ciebie dobry plan.

+0

+1 Dzięki nierozsądkowi za dodatkowy wgląd –

0

W SQL Server 2000 występuje różnica. Miałem wiele bólów głowy z tym. Najwyraźniej ocenia, gdzie klauzule w kolejności, w jakiej są zdefiniowane. Aby określić, czy chcę dane filtrowane przez indeks, musiałem dodać klauzulę WITH (INDEX (MY_INDEX_NAME1, MY_INDEX_NAME2)) po instrukcji FROM.