2011-01-25 14 views
23

Mam złożone kwerendy za pomocą wielu sprzężeń (8 w rzeczywistości). Myślałem o uproszczeniu go do widoku. Po niewielkich badaniach dostrzegam korzyści płynące z prostoty i bezpieczeństwa. Ale nie widziałem żadnych wzmianek o prędkości.Czy widok MySQL jest szybszy niż normalne zapytanie?

Czy widoki działają jak przygotowane instrukcje, w których zapytanie zostało wstępnie skompilowane? Czy korzystanie z widoków przynosi wyraźne korzyści?

+2

Niektóre bazy danych wstępnie skompilują widok, ale nie wierzę, że MySQL to zrobi. Możesz spojrzeć na to pytanie: http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –

+0

Wbrew odpowiedziom - Z mojego doświadczenia wynika, że ​​w przypadku widoków z dużą liczbą złączeń robię bezpośrednie zapytanie działa szybciej. –

Odpowiedz

13

Nie, widok to po prostu zapisane zapytanie tekstowe. Możesz złożyć przeciwko niemu WHERE i ORDER, plan wykonania zostanie obliczony z uwzględnieniem tych klauzul.

+4

To nie jest ściśle zgodne z prawdą. Jest to zasadniczo poprawne, jeśli wybierzesz scalanie dla swojego algorytmu widoku, ale jeśli wybierzesz kuszące, to się zmaterializuje. Niezdefiniowane (domyślne, jeśli nieokreślone) pozwala MySQL wybrać, co może zrobić coś, czego się nie spodziewasz. – Ray

+0

Nie jestem specjalistą MySQL, ale jestem prawie pewien, że algorytm TempTable kontroluje sposób, w jaki MySQL przetwarza widok, gdy są żądane wyniki i nie ma żadnego wpływu na sposób przechowywania widoku. –

+0

Tak, co różni się od tego, że fragment tekstu zostanie wykonany tak, jakby był zapytaniem ad-hoc. – Ray

0

Czasami może to pomóc, ale nie jest to srebrna kula. Widziałem wydajność pomocy w wyświetlaniu, ale widziałem też, że to boli. Widok może wymusić materializację, która może czasami zapewnić lepszą ścieżkę dostępu, jeśli MySQL nie wybierze dla ciebie dobrego.

+0

MySQL nie obsługuje zmaterializowanych widoków. Nie widzę więc, w jaki sposób mogłoby to poprawić wydajność w porównaniu z odpowiednimi zapytaniami ... – ircmaxell

+0

Nie nazywają to zmaterializowanymi widokami, ale "kuszący" jest jednym z algorytmów widoku, który robi mniej więcej tak jak sugeruje nazwa – Ray

+1

ten i kuszący algorytm to nieskończenie żadna wersja zmaterializowanych widoków. Do tej pory w MySQL nie ma wsparcia dla zmaterializowanych widoków ani żadnej formy wstępnie rozwiązanych widoków (chyba że ręcznie ręcznie rzutujesz widok na tabelę). –

0

Widok jest zasadniczo przechowywanym podzapytaniem. Nie ma w zasadzie żadnej różnicy pomiędzy:

SELECT * 
FROM someview 

i

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

wyjątkiem widzenia jest nieco bardziej przenośne, jak nie trzeba pisać kwerendy leżących u podstaw każdym razem, gdy chcesz pracować niezależnie od danych powraca.

+1

A jeśli MySql wybierze kuszący algorytm widoku? – Ray

+2

Całkowicie się nie zgadzam. WIDOK MySQL to nie tylko alias dla zapisanego ciągu zapytania.Możesz uzyskać ogromne zyski lub straty, jeśli użyjesz go poprawnie, lub nie. Zobacz moją odpowiedź, aby uzyskać więcej informacji. – Juan

Powiązane problemy