Myślałem, że bazy danych będą miały wystarczającą wiedzę na temat tego, z czym często się spotykają, i będą w stanie odpowiedzieć na postawione im wymagania, aby mogły zdecydować o dodaniu indeksów do bardzo wymaganych danych.
UNIQUE
ograniczenia.
Myślałem, że bazy danych będą miały wystarczającą wiedzę na temat tego, z czym często się spotykają, i będą w stanie odpowiedzieć na postawione im wymagania, aby mogły zdecydować o dodaniu indeksów do bardzo wymaganych danych.
UNIQUE
ograniczenia.
Odpowiedzi:
Aktualizacja
Jest to teraz zaimplementowane w SQL Server Azure. Generuje rekomendacje
a zarządzanie indeksami można skonfigurować tak, aby było automatyczne .
Włącz automatyczne zarządzanie indeksem
Możesz ustawić Doradcę bazy danych SQL, aby automatycznie wdrażał zalecenia. Gdy rekomendacje będą dostępne, zostaną one automatycznie zastosowane. Podobnie jak w przypadku wszystkich operacji indeksu zarządzanych przez usługę, jeśli wpływ na wydajność jest ujemny, zalecenie zostanie cofnięte.
Oryginalna odpowiedź
Niektóre bazy danych już (automatycznie) tworzą indeksy automatycznie.
W SQL Server plan wykonania może czasem obejmować operatora buforowania indeksów , w którym RDBMS dynamicznie tworzy indeksowaną kopię danych. Jednak bufor ten nie jest stałą częścią bazy danych zsynchronizowaną z danymi źródłowymi i nie może być współużytkowany między wykonywaniem zapytań, co oznacza, że wykonanie takich planów może spowodować wielokrotne tworzenie i upuszczanie tymczasowych indeksów na te same dane.
Być może w przyszłości RDBMS będą mogły dynamicznie upuszczać i tworzyć trwałe indeksy zgodnie z obciążeniem.
Proces optymalizacji indeksu jest w końcu tylko analizą kosztów i korzyści. Chociaż prawdą jest, że ludzie mogą mieć więcej informacji na temat względnego znaczenia zapytań w obciążeniu, zasadniczo nie ma powodu, dla którego informacje te nie mogłyby zostać udostępnione optymalizatorowi. SQL Server ma już moduł zarządzający zasobami, który umożliwia klasyfikowanie sesji do różnych grup obciążeń z różnymi przydziałami zasobów zgodnie z priorytetem.
Brakujące indeksy DMV, o których wspomina Kenneth, nie są przeznaczone do implementacji na ślepo, ponieważ uwzględniają jedynie zalety konkretnego zapytania i nie podejmują próby uwzględnienia kosztu potencjalnego indeksu dla innych zapytań. Nie konsoliduje również podobnych brakujących indeksów. np. wyjście tego DMV może zgłaszać brakujące indeksy na A,B,C
iA,B INCLUDE(C)
Niektóre bieżące problemy z pomysłem są
Prawdopodobnie uzasadnione jest oczekiwanie poprawy dokładności modeli wyceny w czasie, ale punkt 2 wydaje się trudniejszy do rozwiązania, a punkt 3 jest z natury nierozpuszczalny.
Prawdopodobnie jednak zdecydowana większość instalacji nie znajduje się w tej wyidealizowanej sytuacji z wykwalifikowanym personelem, który stale monitoruje, diagnozuje i przewiduje (lub przynajmniej reaguje) na zmiany obciążenia pracą.
Projekt AutoAdmin w Microsoft Research działa od 1996 roku
Celem tego projektu jest samodzielne dostrajanie baz danych i administrowanie nimi poprzez wykorzystanie wiedzy o obciążeniu pracą
Strona główna projektu zawiera kilka intrygujących projektów. Jedna jest szczególnie istotna w przypadku tego pytania
Kolejny interesujący problem pojawia się, gdy nie ma dostępnego DBA (np. Wbudowana baza danych lub mała firma). W takich scenariuszach ważne może być ciągłe dostrajanie indeksów przy niskim poziomie dotyku. Zbadaliśmy rozwiązania ... [w] „ Podejście internetowe do dostrajania projektu fizycznego ” w ICDE 2007.
Autorzy stwierdzają
Dzięki coraz bardziej powszechnym funkcjom DBMS, takim jak indeksy online, zachęca się do poszukiwania bardziej automatycznych rozwiązań fizycznych problemów projektowych, które posuwają naprzód stan techniki.
Artykuł przedstawia algorytm
Jego główne cechy to:
- Po zoptymalizowaniu zapytań identyfikujemy odpowiedni zestaw indeksów kandydujących, które poprawiłyby wydajność. Ta funkcja umożliwia kontynuowanie przetwarzania zapytań równolegle z indeksami wbudowanymi w tle.
- W czasie wykonywania śledzimy potencjalne korzyści, które tracimy, nie mając takich indeksów kandydujących, a także użyteczność istniejących indeksów w obecności zapytań, aktualizacji i ograniczeń przestrzeni.
- Po zebraniu wystarczającej liczby „dowodów”, że fizyczna zmiana projektu jest korzystna, automatycznie uruchamiamy tworzenie lub usuwanie indeksu.
- Internetowy charakter naszego problemu oznacza, że ogólnie będziemy opóźniać się z optymalnymi rozwiązaniami znającymi przyszłość. Jednak dzięki dokładnemu pomiarowi dowodów upewniamy się, że nie odczuwamy znaczących opóźnień w podejmowaniu decyzji, ograniczając w ten sposób kwotę poniesionej straty
Implementacja algorytmu pozwala na dławienie w odpowiedzi na zmiany obciążenia serwera, a także może przerwać tworzenie indeksu, jeśli podczas tworzenia zmiany obciążenia i oczekiwane korzyści spadną poniżej punktu, który uznaje się za opłacalny.
Wniosek autorów na temat Online a tradycyjne strojenie fizyczne.
Algorytmy online w tej pracy są przydatne, gdy DBA nie są pewni przyszłego zachowania obciążenia lub nie mają możliwości przeprowadzenia kompleksowej analizy lub modelowania. Jeśli DBA ma pełne informacje o charakterystyce obciążenia, lepszym rozwiązaniem byłaby analiza statyczna i wdrożenie za pomocą istniejących narzędzi (np. [2, 3]).
Wnioski tutaj są podobne do wniosków zawartych w innym artykule Autonomiczne oparte na zapytaniach strojenie indeksu
Nasze podejście nie może przebić doradcy indeksu, jeśli całe obciążenie jest znane z góry. Jednak w dynamicznych środowiskach z ewoluującymi i zmieniającymi się obciążeniami podejście oparte na zapytaniach daje lepsze wyniki.
Projekt indeksu, który wprowadziłeś, jest czymś więcej niż sztuką. RDBMS nie jest wystarczająco inteligentny, aby podjąć typowe obciążenia i zaprojektować inteligentną strategię indeksowania. Interwencja człowieka (czytaj: DBA) polega na analizie obciążenia pracą i określeniu najlepszego podejścia.
Gdyby nie istniała kara posiadania indeksów, byłoby po prostu strzelać do nieskończonej liczby indeksów. Ale ponieważ modyfikacja danych (WSTAWKI, AKTUALIZACJE i USUWANIE) ma wpływ na włączone indeksy w tabeli, to narzuty tych indeksów będą zmienne.
Inteligentne tworzenie indeksów, które zmaksymalizują wydajność odczytu, przy minimalnym nakładzie modyfikacji danych, wymaga projektowania i strategii człowieka.
W rzeczywistości istnieją takie bazy danych. Na przykład Google BigTable i Amazon SimpleDB automatycznie tworzą indeksy (chociaż nie są to RDBMS) . Jest też co najmniej jeden silnik MySQL RDBMS, który to robi. SQL Server śledzi również indeksy, które Twoim zdaniem powinieneś utworzyć , chociaż nie idzie tak daleko jak ich tworzenie.
Problem jest zaskakująco trudny do rozwiązania, więc nic dziwnego, że większość baz danych nie tworzy ich automatycznie (BigTable / SimpleDB sobie z tym radzi, ponieważ nie pozwalają na dowolne łączenia, co znacznie ułatwia sprawę) . Ponadto tworzenie indeksów w locie jest czasochłonnym procesem, który wymaga wyłącznego dostępu do całego stołu - zdecydowanie nie jest to coś, co chcesz zrobić, gdy stół jest online.
Jednak biorąc pod uwagę liczbę aplikacji internetowych LAMP, które zostały napisane przez amatorów, którzy nawet nie wiedzą, co to jest indeks , nadal uważam, że ta funkcja byłaby korzystna dla niektórych osób.
rdbms
i nie sądzę, że BigTable należy do tej kategorii.
Chociaż istnieją już obszerne odpowiedzi, wydają się one ominąć prawdziwą odpowiedź: Indeksy nie zawsze są pożądane.
Biorąc pod uwagę analogię samochodu wymienioną w komentarzach, lepiej powiedzieć, dlaczego nie wszystkie samochody są wyposażone w pakiety sportów ekstremalnych? Częściowo jest to koszt, ale wynika to również z faktu, że wiele osób nie potrzebuje lub nie chce niskoprofilowych opon i twardego zawieszenia; to niepotrzebnie niewygodne.
Więc może masz 1000 odczytów dla każdej wstawki, dlaczego nie masz automatycznie utworzonego indeksu? Jeśli tabela jest szeroka, a zapytania są zróżnicowane, dlaczego nie mieć ich kilku? Może zatwierdzenie ma krytyczne znaczenie dla czasu, a odczyty nie; w tych okolicznościach spowolnienie wstawiania może być niedopuszczalne. Być może pracujesz z ograniczoną ilością miejsca na dysku i nie możesz sobie pozwolić na dodatkowe indeksy zajmujące miejsce, które masz.
Chodzi o to, że indeksy nie są tworzone automatycznie, ponieważ nie są odpowiedzią na wszystko. Projektowanie indeksów to nie tylko powiedzenie „hej, to przyspieszy moje czytanie”, należy wziąć pod uwagę inne czynniki.
Nie są bystrzy, są kawałkiem kodu. Za każdym razem, gdy wprowadzasz nowe dane do bazy danych, musi ona znaleźć nową lokalizację i mapę, aby znaleźć ją na żądanie. Indeksowanie dźwięków jest łatwiejsze niż jest, po prostu nadajesz nowy numer nowej części danych? A może następne pytanie nie dotyczy ostatniego fragmentu danych, ale około 36271 fragmentów wcześniej? Możesz go łatwo znaleźć za pomocą swojego indeksu, prawda? Ale co jeśli zapytanie zawiera słowo „wędkowanie”, które można znaleźć w starym kawałku 36271 z 1997 r.? Ho? W starym artykule ani słowa o łowieniu ryb.
Gdyby dane przychodziły do bazy danych jedna po drugiej, mogłyby być indeksowane w ten sposób. Ale proste indeksowanie prędzej czy później spowoduje błędne wyniki i / lub spowolnienie działania ...