Wydaje się znane, że aby znaleźć odpowiedź na zapytanie w relacyjnej bazie danych , potrzebny jest czas i nie można pozbyć się wykładnika.D | D | | Q | | Q |
Ponieważ może być bardzo duży, zastanawiamy się, dlaczego bazy danych w ogóle działają w praktyce.
Czy to tylko kwestia zwykłych zapytań, które wcale nie są duże w rzeczywistych aplikacjach? (Interesujące jest zatem, aby wiedzieć, jaki jest zwykle rozmiar zapytań stawianych systemom relacyjnych baz danych i jaki jest „maksymalny” rozmiar zapytań, na które w praktyce system DB może efektywnie odpowiedzieć ).
Uwagi na temat wykładnikanie można usunąć
Aby pokazać, że wykładniknie można go usunąć, można użyć zapytania z pytaniem, czy na wykresie podanym przez bazę danych istnieje klika o rozmiarze . Sprawdzenie, czy na wykresie jest klika, stanowi problem NP-zupełny. Co więcej, nie jest możliwy do ustalenia parametr stały, z parametrem . Szczegóły można znaleźć np. W
Libkin, L .: Elementy teorii modeli skończonych. Springer (2004)
lub
Papadimitriou, CH, Yannakakis, M .: O złożoności zapytań do bazy danych. J. Comput. Syst. Sci. 58 (3), 407–427 (1999)n n n
źródło
SELECT * FROM users WHERE username="abc" AND passwrod="xyz"
) to proste wyszukiwania, których uruchomienie wymaga O (| D |). Jeśli istnieje indeks odpowiednich pól bazy danych, zajmie O (log | D |). Nie interesuję się bazami danych, ale nie sądzę, aby bardziej skomplikowane zapytania wymagałyby wykładniczego czasu.Odpowiedzi:
Istnieją duże klasy zapytań, które są „łatwe”, nawet w najgorszym przypadku. W szczególności, jeśli klasa zapytań zawiera tylko zapytania łączone, a każde zapytanie ma ograniczoną szerokość (na przykład szerokość, szerokość wykresu padania, ułamkowa szerokość hipertree lub szerokość podmodularna), wówczas na pytanie można odpowiedzieć, używając czegoś w rodzaju drzewa łączenia , wraz z wyliczaniem brutalnej siły dla lokalnych części zapytania, które odbiegają od drzewa. Wymaga to czasu wielomianu, którego stopień wielomianu jest określony przez parametr width.
Wygląda na to, że wiele zapytań napotkanych w praktyce ma charakter łączny i ma małą szerokość. Tak więc wielomianowe środowisko wykonawcze ma w tym przypadku niski stopień.
Dániel Marx przedstawił niedawno na STOC 2010 artykuł na temat szerokości podmodularnej, którego pełna wersja zawiera ładne podsumowanie różnych pojęć szerokości i tego, jak sformułowanie CSP odnosi się do formalizmu bazy danych (brakuje wersji konferencyjnej).
To nie jest pełna odpowiedź, ponieważ nie zajmuje się „typową” złożonością zapytań do bazy danych, ale nawet przy najgorszym przypadku analizy są łatwe.
źródło
Można użyć zapytań Q_n, aby sprawdzić, czy wykres reprezentowany jako baza danych zawiera klikę zawierającą n elementów. Sprawdzenie, czy wykres ma klikę, stanowi problem NP-zupełny. Co więcej, nie jest możliwy do ustalenia parametr stały, z parametrem n (co oznacza D ^ n).
źródło
Innym sposobem odpowiedzi na to pytanie jest „nie!”.
Jeśli podasz typowej implementacji DBMS zapytanie zawierające bardzo dużą liczbę złączeń, nie przejdzie ono nawet przez fazę planowania / optymalizacji (nie mówiąc już o ocenie), nawet jeśli zapytanie jest acykliczne lub w inny sposób ma bardzo prostą strukturę, taką jak András nawiązuje do powyższego.
Ale w przypadku „typowych” obciążeń DBMS takie zapytania wydają się nie pojawiać.
źródło
Oto bardziej realistyczna wersja odpowiedzi tigreen z punktu widzenia osoby, która faktycznie intensywnie korzysta z (relacyjnych) baz danych: Cały sens i złożoność ich zastosowania polega na ich ustrukturyzowaniu w sposób, którego wymagałyby tak mało dołącza się do każdego zapytania, które jest zawsze potrzebne, dlatego właśnie wykonują pracę . Innymi słowy, nie oczekuj, że bazy danych same rozwiążą dla ciebie złożone problemy - nie zrobiłyby tego, ale jeśli są mądrze używane, są naprawdę przydatnym i przydatnym narzędziem.
źródło
Połączenia są kwadratowe tylko w relacjach wiele do wielu. Są to stosunkowo rzadkie: w praktyce większość relacji i złączeń ma wartość 1 do wielu, więc jeśli zostaną zdefiniowane indeksy / klucze, zajmie to czas liniowy. Zapytania z kilkoma połączeniami „wiele do wielu” stanowią poważny problem.
źródło