Jeśli mamy duuuuuże tabele (tzn. zawierające dużo danych) to ich przetwarzanie możemy sobie usprawnić dzieląc je na takie wirtualne części nazywane partycjami. Dzięki temu:
- Można zadać zapytanie tylko do jednej partycji w tabeli i dzięki temu nie ma potrzeby przetwarzania całej tabeli (co jak się nie trudno domyślić jest szybsze)
- Joiny śmigają szybciej na takiej jednej partycji niż na całej tabeli, to samo grupowania, sortowanie i cała reszta możliwych sposobów na męczenie bazy.
- Partycje możemy sobie stworzyć na podstawie zawartości kolumny w tabeli, dzięki czemu możemy np. mieć szybszy dostęp do faktur przykładowo z tego roku.
- W ogóle idą za tym wszystkie korzyści związane z mniejszą ilością danych do przetworzenia.
Partycje możemy generalnie tworzyć na podstawie zawartości lub podzielić na sekcje równej wielkości. Dzielone na podstawie zawartości mogą być różnych rozmiarów - możemy mieć przykładowo milion faktur z tego roku, ale 5 milionów z zeszłego.
Partycjonowanie względem zawartości:
Powyżej podzieliłem tablicę na partycję względem zawartości kolumny salary na sekcje.
Partycjonowanie hashowe (takie na równej wielkości kawałki):
Złe wieści:
- Taka opcja dostępna jest tylko w wersji Enterprise (która kosztuje tyle co dom Twój i wszystkich Twoich sąsiadów z całej wioski :P )
- Sama tylko opcja kosztuje tyle co całkiem niezgorszy samochód
A od siebie dodam, że podobną funkcjonalność można spokojnie ogarnąć za pomocą PL/SQL + widoki. Nie jest to może taki fullwypas jak oryginał, ale do np. archiwizacji danych styknie :)
OdpowiedzUsuń