2008-10-28 13 views
29

Znalazłem a posting on the MySQL forums from 2005, ale nic bardziej aktualnego niż to. Na tej podstawie nie jest to możliwe. Ale wiele może się zmienić za 3-4 lata.Czy można mieć indeksowany widok w MySQL?

To, czego szukam, to sposób na indeksowanie widoku, ale tabela, która jest wyświetlana, pozostaje niezweryfikowana. Indeksowanie rani proces pisania i ta tabela jest zapisywana dość często (do tego stopnia, że ​​indeksowanie spowalnia wszystko do indeksowania). Jednak brak indeksu sprawia, że ​​moje pytania boleśnie zwalniają.

+0

Zobacz http://stackoverflow.com/q/7922675/632951 – Pacerier

Odpowiedz

28

Nie sądzę, że MySQL obsługuje zmaterializowane widoki, które są potrzebne, ale i tak nie pomogłoby to w tej sytuacji. Niezależnie od tego, czy indeks znajduje się w widoku, czy w tabeli bazowej, w pewnym momencie musi zostać zapisany i zaktualizowany podczas aktualizacji tabeli bazowej, aby nadal powodował problemy z szybkością zapisu.

Twój najlepszy zakład to prawdopodobnie tworzenie tabel podsumowujących, które będą okresowo aktualizowane.

+1

Dzięki. Zrobiłem więcej wyszukiwania na zmaterializowane widoki i wygląda na to, że masz rację. –

7

Czy zastanawiałeś się nad streszczeniem danych dotyczących przetwarzania transakcji z danych analitycznych, aby mogły one być wyspecjalizowane w celu spełnienia ich unikalnych wymagań?

Podstawową ideą jest to, że masz jedną wersję danych, która jest regularnie modyfikowana, to jest strona przetwarzania transakcji i wymaga ciężkich normalizacji i indeksów lekkich, dzięki czemu operacje zapisu są szybkie. Druga wersja danych jest skonstruowana do przetwarzania analitycznego i zwykle jest mniej znormalizowana i silniej indeksowana dla szybkich operacji raportowania.

Dane uporządkowane wokół przetwarzania analitycznego są generalnie zbudowane wokół metodologii modułowej hurtowni danych, która składa się z tabel faktów reprezentujących boki kostki i tabele wymiarów, które reprezentują krawędzie sześcianu.

+0

Właśnie nad tym pracuję. Myślę. Zamierzam mieć tabelę z danymi, których potrzebuję, która jest regularnie aktualizowana, a która jest indeksowana dla zapytań, więc muszę tylko wysyłać zapytania do tabeli z indeksem niepowiązanym co [long unit of time], aby zaktualizować tabelę indeksowaną nowe dane. –

0

Czy chcesz tylko jeden indeksowany widok? Jest mało prawdopodobne, aby pisanie do tabeli zawierającej tylko jeden indeks miało taki wpływ. Czy nie ma klucza podstawowego?

Jeśli każdy rekord jest duży, możesz zwiększyć wydajność, zastanawiając się, jak je skrócić. Lub skróć długość potrzebnego indeksu.

Jeśli jest to tabela tylko do zapisu (tzn. Nie trzeba robić aktualizacji), może być zabójcze w MySQL, aby rozpocząć archiwizowanie, lub w inny sposób usuwanie rekordów (i kluczy indeksowych), wymagające uruchomienia indeksu wypełnianie (ponowne wykorzystanie) gniazd z usuniętych kluczy, a nie tylko dołączanie nowych wartości indeksu. Niezrozumiałe, ale w tym przypadku lepiej jest mieć większy stół.

2

Flexviews obsługuje zmaterializowane widoki w MySQL, śledząc zmiany w tabelach podstawowych i aktualizując tabelę, która działa jak zmaterializowany widok. Podejście to oznacza, że ​​SQL obsługiwany przez widok jest nieco ograniczony (ponieważ procedury rejestrowania zmian muszą wymyślić, które tabele powinny śledzić zmiany), ale o ile wiem, jest to najbliższy dostęp do zmaterializowanych widoków w MySQL .

Powiązane problemy