Kiedy tworzysz tabele z wielu sprzężeń do użytku w analizie, kiedy preferowane jest używanie widoków zamiast tworzenia nowej tabeli?
Jednym z powodów, dla których wolałbym używać widoków, jest to, że schemat bazy danych został opracowany przez naszego administratora z Rubiego i nie znam go. Mogę zażądać utworzenia tabel, ale wymaga to dodatkowego kroku i chciałbym mieć większą elastyczność podczas opracowywania / testowania nowych połączeń.
Zacząłem korzystać z widoków po odpowiedzi na powiązane pytanie dotyczące SO ( kiedy używać R, kiedy używać SQL ). Najwyżej głosowana odpowiedź zaczyna się od „rób manipulacje danymi w SQL, dopóki dane nie znajdą się w jednej tabeli, a następnie wykonaj resztę w R.”
Zacząłem używać widoków, ale napotkałem kilka problemów z widokami:
- zapytania są znacznie wolniejsze
- Widoki nie są zrzucane z produkcyjnej do zapasowej bazy danych, której używam do analizy.
Czy widoki są odpowiednie do tego zastosowania? Jeśli tak, czy powinienem oczekiwać kary za wyniki? Czy istnieje sposób na przyspieszenie zapytań dotyczących wyświetleń?
źródło
Odpowiedzi:
Widoki w MySQL są obsługiwane przy użyciu jednego z dwóch różnych algorytmów:
MERGE
lubTEMPTABLE
.MERGE
jest po prostu rozszerzeniem zapytania z odpowiednimi aliasami.TEMPTABLE
tak to wygląda, widok umieszcza wyniki w tabeli tymczasowej przed uruchomieniem klauzuli WHERE i nie ma w niej żadnych indeksów.Trzecią opcją jest
UNDEFINED
, która mówi MySQL, aby wybrał odpowiedni algorytm. MySQL spróbuje użyć,MERGE
ponieważ jest bardziej wydajny. Główne zastrzeżenie:Zaryzykowałbym przypuszczenie, że WIDZENIA wymagają algorytmu TEMPTABLE, co powoduje problemy z wydajnością.
Oto naprawdę stary post na blogu dotyczący wydajności wyświetleń w MySQL i wydaje się, że nie poprawił się.
Na końcu tunelu może być jednak trochę światła na temat tymczasowych tabel niezawierających indeksów (powodujących pełne skanowanie tabel). W 5.6 :
Jak wskazuje @ypercube, MariaDB 5.3 dodała tę samą optymalizację. Ten artykuł zawiera ciekawy przegląd tego procesu:
źródło
Fields of merge-able views and derived tables are involved now in all optimizations employing equalities
Widoki to narzędzia bezpieczeństwa. Nie chcesz, aby określony użytkownik lub aplikacja wiedziała, gdzie znajduje się twoja tabela danych, udostępniasz widok tylko z potrzebnymi kolumnami.
Pamiętaj, że widoki zawsze obniżają wydajność, podobne zapytania powinny być procedurami i funkcjami przechowywanymi, a nie widokami.
Aby dokonać strojenia zapytania, zawsze postępuj zgodnie z najlepszymi praktykami, unikaj używania funkcji w klauzulach WHERE, twórz indeksy w celu przyspieszenia zaznaczeń, ale nie nadużywaj indeksów degradujących wstawiania, aktualizacji i usuwania.
Istnieje dobra dokumentacja, która może ci pomóc: http://www.toadworld.com/LinkClick.aspx?fileticket=3qbwCnzY/0A=&tabid=234
źródło
Myślę, że widoki są predefiniowaną strukturą (bez danych) do scalania tabel w jedną, aby pokonać zapytanie z wielu tabel, które można wykorzystać z rzeczywistych danych do szybkiego zapytania relacyjnego ...
źródło