Jaka jest różnica między widokami a widokami zmaterializowanymi w Oracle?

Odpowiedzi:

356

Widoki zmaterializowane są oparte na dysku i są okresowo aktualizowane na podstawie definicji zapytania.

Widoki są tylko wirtualne i uruchamiają definicję zapytania przy każdym dostępie.

dakrakot
źródło
54
Również wtedy, gdy potrzebujesz wydajności danych, które nie muszą być aktualne aż do sekundy, zmaterializowane widoki są lepsze, ale Twoje dane będą starsze niż w widoku standardowym. Zwykle raporty BI zyskują wiele korzyści z materializowanych widoków.
Marthinus,
29
@Marthinus - jest to poprawne, z wyjątkiem przypadku zmaterializowanego widoku ODŚWIEŻANIE NA KOMISJĘ - MV zwróci dokładnie dane, które zostały zatwierdzone.
Jeffrey Kemp
2
Jakie jest znaczenie DISK? Czy to znaczy, że tabela nie jest częścią DISK? Czy jest przechowywany w pliku, a dostęp do DYSKU jest szybszy niż dostęp do pliku ....?
Kanagavelu Sugumar
1
@KanagaveluSugumar Tak, rzeczywiste tabele są również zapisywane na dysku.
dacracot
5
@dacracot Thanks! myślę, że masz zamiar powiedzieć inne niż tabele DB w DISK; ten MVIEW również utrzymuje tabelę, rozwiązując wszystkie sprzężenia. Aby w czasie wykonywania wystarczył dostęp do pojedynczej tabeli; i nie trzeba wyszukiwać w wielu tabelach warunków łączenia, co zwykle odbywa się w widoku normalnym. Dziękuję Ci!
Kanagavelu Sugumar
333

Wyświetlenia

Oceniają dane w tabelach leżących u podstaw definicji widoku w momencie zapytania o widok . Jest to logiczny widok twoich tabel, bez danych przechowywanych gdzie indziej.

Zaletą widoku jest to, że zawsze zwróci ci najnowsze dane . Minusem myślą jest to, że jego realizacja zależy od tego jak dobry SELECT pogląd opiera się na. Jeśli instrukcja select używana przez widok łączy się z wieloma tabelami lub używa sprzężeń opartych na nieindeksowanych kolumnach, widok może działać słabo.

Zmaterializowane widoki

Są one podobne do zwykłych widoków, ponieważ są logicznym widokiem twoich danych (na podstawie instrukcji select), jednak podstawowy zestaw wyników zapytania został zapisany w tabeli . Zaletą tego jest to, że kiedy przeszukujesz zmaterializowany widok, odpytujesz tabelę , która może być również indeksowana.

Ponadto, ponieważ wszystkie sprzężenia zostały rozwiązane w czasie odświeżania widoku zmaterializowanego, płacisz cenę połączenia raz (lub tak często, jak odświeżasz widok zmaterializowany), a nie za każdym razem, gdy wybierzesz widok zmaterializowany. Ponadto, po włączeniu przepisywania zapytań, Oracle może zoptymalizować zapytanie, które wybiera ze źródła zmaterializowanego widoku w taki sposób, że zamiast tego odczytuje z zmaterializowanego widoku. W sytuacjach, w których tworzysz zmaterializowane widoki jako formy tabel agregacyjnych lub kopie często wykonywanych zapytań, może to znacznie przyspieszyć czas odpowiedzi aplikacji użytkownika końcowego. Minusem jest jednak, że dane wrócisz z zmaterializował widok jest tylko tak na bieżąco, co po raz ostatni Widok zmaterializowany został odświeżony .


Widoki zmaterializowane można ustawić tak, aby odświeżały się ręcznie, zgodnie z ustalonym harmonogramem lub w oparciu o bazę danych wykrywającą zmianę danych z jednej z podstawowych tabel . Widoki zmaterializowane można aktualizować stopniowo, łącząc je ze zmaterializowanymi dziennikami widoków, które działają jak źródła przechwytywania danych zmian w tabelach leżących u podstaw.

Widoki zmaterializowane są najczęściej używane w aplikacjach do hurtowni danych / analiz biznesowych, w których zapytania do dużych tabel faktów z tysiącami milionów wierszy skutkowałyby czasami odpowiedzi na zapytania, co spowodowało, że aplikacja nie mogła zostać użyta.


Widoki zmaterializowane pomagają również zagwarantować spójny moment w czasie, podobny do izolacji migawki .

Mike Williamson
źródło
9
+1 za szczegółowe wyjaśnienie, ale co jest wadą przepisywania zapytań? Jeśli przepisywanie zapytań pozwoli Oracle jeszcze bardziej zoptymalizować zapytanie, to ZAWSZE powinniśmy włączyć przepisywanie zapytań, prawda?
Rosdi Kasim
6
@Rosdi powiedział: „dane, które odzyskujesz z zmaterializowanego widoku, są tak aktualne, jak ostatni raz, gdy zmaterializowany widok został odświeżony”
Jeffrey Kemp
49

Widok wykorzystuje zapytanie do pobrania danych z tabel bazowych.

Widok zmaterializowany to tabela na dysku, która zawiera zestaw wyników zapytania.

Widoki zmaterializowane są używane przede wszystkim w celu zwiększenia wydajności aplikacji, gdy nie jest wykonalne lub pożądane użycie widoku standardowego z zastosowanymi indeksami. Widoki zmaterializowane mogą być regularnie aktualizowane przez wyzwalacze lub za pomocą ON COMMIT REFRESHopcji. Wymaga to kilku dodatkowych uprawnień, ale to nic skomplikowanego. ON COMMIT REFRESHistnieje od co najmniej Oracle 10.

Jeremiasz Peschka
źródło
Istnieje opcja „
Odśwież po zatwierdzeniu
Dzięki! Zaktualizuję odpowiedź. Czy wiesz, kiedy ta funkcja została dodana do Oracle?
Jeremiasz Peschka
20

Widoki są w zasadzie logicznymi strukturami tabelopodobnymi zapełnianymi w locie przez dane zapytanie. Wyniki zapytania dotyczącego widoku nie są zapisywane w dowolnym miejscu na dysku, a widok jest odtwarzany za każdym razem, gdy zapytanie jest wykonywane. Widoki zmaterializowane to rzeczywiste struktury przechowywane w bazie danych i zapisywane na dysku. Są one aktualizowane na podstawie parametrów zdefiniowanych podczas ich tworzenia.

użytkownik12786
źródło
Jakie jest znaczenie DISK? Czy to znaczy, że tabela nie jest częścią DISK? Czy jest przechowywany w pliku, a dostęp do DYSKU jest szybszy niż dostęp do pliku ....?
Kanagavelu Sugumar
18

Widok zmaterializowany - tabela na dysku zawierająca zestaw wyników zapytania

Widok niepasujący - zapytanie, które pobiera dane z podstawowej tabeli

fn27
źródło
7

Widok: widok to tylko nazwane zapytanie. Nic nie przechowuje. W przypadku zapytania dotyczącego widoku uruchamiane jest zapytanie definicji widoku. Rzeczywiste dane pochodzą z tabeli.

Widoki zmaterializowane : fizycznie przechowują dane i są okresowo aktualizowane. Podczas odpytywania MV podaje dane z MV.

smshafiqulislam
źródło
2

Dodanie do dość dokładnej odpowiedzi Mike'a McAllistera ...

Widoki zmaterializowane można ustawić tak, aby odświeżały się automatycznie poprzez bazę danych wykrywającą zmiany, gdy kompilator uzna, że ​​zapytanie o widok jest proste . Jeśli zostanie to uznane za zbyt skomplikowane, nie będzie w stanie skonfigurować tak naprawdę wewnętrznych wyzwalaczy do śledzenia zmian w tabelach źródłowych, aby zaktualizować tylko zmienione wiersze w tabeli mview.

Kiedy tworzysz zmaterializowany widok, przekonasz się, że Oracle tworzy zarówno widok, jak i tabelę o tej samej nazwie , co może wprowadzać zamieszanie.

Gulasz S
źródło
Tabele obsługujące widok zmaterializowany nie mają tej samej nazwy co widok.
Jeffrey Kemp,
@JeffreyKemp, jesteś pewien? Akceptowana odpowiedź tutaj stackoverflow.com/a/33552513 twierdzi inaczej. Chociaż tak, mogło być inaczej w 2010 r., Kiedy skomentowałeś ...
leqid,
Mój komentarz powyżej musiał dotyczyć starszej wersji (prawdopodobnie 9i). Masz rację, MV dostają stolik o tej samej nazwie, przynajmniej w nowoczesnych wersjach.
Jeffrey Kemp,
1

Widoki zmaterializowane to logiczny widok danych sterowany przez wybrane zapytanie, ale wynik zapytania zostanie zapisany w tabeli lub dysku, a także definicja zapytania zostanie zapisana w bazie danych.

Wydajność widoku zmaterializowanego jest lepsza niż normalny widok, ponieważ dane zmaterializowanego widoku zostaną zapisane w tabeli, a tabela może zostać zindeksowana, dzięki czemu szybsze łączenie również jest wykonywane w czasie odświeżania widoków zmaterializowanych, więc nie ma potrzeby każdorazowego uruchamiania dołączyć instrukcję jak w przypadku widoku.

Inna różnica polega na tym, że w przypadku widoku zawsze otrzymujemy najnowsze dane, ale w przypadku widoku zmaterializowanego musimy odświeżyć widok, aby uzyskać najnowsze dane. W przypadku widoku zmaterializowanego potrzebujemy dodatkowego wyzwalacza lub jakiejś automatycznej metody, abyśmy mogli odświeżać MV, nie jest to wymagane w przypadku widoków w bazie danych.

Dhirendra Gautam
źródło