Jestem niezmiernie nowym użytkownikiem, więc proszę, wybacz mi, jeśli to głupie pytanie, ale mam widok, który jest bardzo pomocny w optymalizacji dość nieporęcznego zapytania i pozwala mi wybrać w stosunku do małego podzbioru kolumn w widoku. miałem jednak nadzieję, że Widok będzie gdzieś przechowywany, więc wybór przeciwko nie zajęłby wiele czasu.Czy istnieje sposób przechowania pamięci podręcznej widoku, aby zapytania na jego temat były szybkie?
Mogę się mylić, ale mam wrażenie (z szybkości, z jaką wykonuje się create view
i od czasu trwania moich zapytań na mój widok), że Widok faktycznie jest uruchamiany jako zapytanie przed zapytaniem zewnętrznym, za każdym razem Wybieram przeciwko niemu.
Naprawdę mam nadzieję, że przeoczyłem jakiś mechanizm, w którym po uruchomieniu CREATE VIEW może wykonać ciężką pracę z kwerendy View *, tak, że moje kolejne wybieranie przeciwko tego statycznego widoku byłoby naprawdę szybkie.
BTW, całkowicie rozumiem, że oczywiście ten WIDOK będzie migawką danych, które istniały w momencie utworzenia WIDOKU i nie odzwierciedlają żadnych nowych informacji, które zostały wstawione/zaktualizowane po utworzeniu WIDOKU. Dokładnie to, czego potrzebuję.
TIA
Więc to, czego chcesz, to zmaterializowany widok, a nie widok, który dostarcza mysql, który jest tylko aliasem dla ogromnego zapytania. Począwszy od mysql 5.1, zapytania SELECT względem widoku są buforowane, dlatego wszelkie kolejne zapytania powinny być szybkie. Jak dokładnie coś tu nie działa? Czy używasz podzapytań w zapytaniach tworzących widok? –
Używam ogromnej kwerendy z wieloma subselects w moim VIEW, i nie wydaje się być w ogóle buforowania. Jako dowód koncepcji nazwałem po prostu 'select count (id) z myView', co, jak przypuszczam, powinno być całkiem zgryźliwe, jeśli wynik myView został zbuforowany, ale niestety trwa to tak samo długo, jak każde inne zapytanie przeciwko niemu. Czy problem dotyczy wyboru Mojego widoku? (Nie jestem pewien, czy to masz na myśli podzapytania lub czy istnieje rozróżnienie). –
Subselect lub podzapytanie - więc mówimy o tym samym. MySQL używa własnej pamięci podręcznej zapytań.Powiedzmy, że mamy tabelę z 1 milimilem wierszy, wyszukujesz ją jak 'select count (*)' - pierwszy raz będzie powolny, drugi raz będzie natychmiastowy, ponieważ pobierze buforowane dane. Ta sama reguła dotyczy widoków, z tą różnicą, że MySQL nie buforuje wyników podselekcji. Wszystko to oznacza, że wynik uzyskany z widoku * nie będzie buforowany wewnętrznie * przez MySQL, jeśli masz podselekty. Dlatego zawsze będzie uruchamiał zapytania od zera, jeśli zechcesz. I dlatego twój widok będzie powolny. –