Co właściwie robi baza danych, aby dowiedzieć się, co pasuje do instrukcji select?
Mówiąc szczerze, to kwestia brutalnej siły. Po prostu czyta każdy rekord kandydata w bazie danych i dopasowuje wyrażenie do pól. Tak więc, jeśli masz „select * from table, gdzie name = 'fred'”, dosłownie przechodzi przez każdy rekord, pobiera pole „name” i porównuje je z „fred”.
Teraz, jeśli pole „table.name” jest indeksowane, baza danych (prawdopodobnie, ale niekoniecznie) użyje najpierw indeksu do zlokalizowania rekordów kandydatów, do których ma zastosować właściwy filtr.
Zmniejsza to liczbę rekordów kandydatów, do których ma zostać zastosowane wyrażenie, w przeciwnym razie wykona to, co nazywamy „skanowaniem tabeli”, tj. Przeczyta każdy wiersz.
Zasadniczo jednak lokalizowanie rekordów kandydatów jest niezależne od tego, w jaki sposób stosuje rzeczywiste wyrażenie filtru i, oczywiście, można wykonać kilka sprytnych optymalizacji.
W jaki sposób baza danych interpretuje złączenie inaczej niż zapytanie z kilkoma instrukcjami „gdzie klucz1 = klucz2”?
Cóż, złączenie służy do utworzenia nowej „pseudo tablicy”, do której stosowany jest filtr. Masz więc kryteria filtru i kryteria łączenia. Kryteria łączenia są używane do budowania tej „pseudo tabeli”, a następnie filtr jest stosowany względem niej. Teraz, gdy interpretujemy sprzężenie, znowu jest to ten sam problem, co w przypadku filtra - brutalne porównania siły i odczyty indeksów w celu zbudowania podzbioru dla „pseudo tabeli”.
Jak baza danych przechowuje całą swoją pamięć?
Jednym z kluczy do dobrej bazy danych jest sposób, w jaki zarządza ona swoimi buforami we / wy. Ale w zasadzie dopasowuje bloki RAM do bloków dysku. Dzięki nowoczesnym menedżerom pamięci wirtualnej prostsza baza danych może prawie polegać na maszynie wirtualnej jako na menedżerze bufora pamięci. Wysokiej klasy DB robią to wszystko samodzielnie.
Jak przechowywane są indeksy?
B + Drzewa zazwyczaj powinieneś to sprawdzić. To prosta technika, która istnieje od lat. Jego korzyść jest wspólna z większością każdego zrównoważonego drzewa: spójny dostęp do węzłów oraz wszystkie węzły liści są połączone, dzięki czemu można łatwo przechodzić od węzła do węzła w kolejności kluczy. Dzięki indeksowi wiersze można traktować jako „posortowane” pod kątem określonych pól w bazie danych, a baza danych może wykorzystać te informacje do optymalizacji. Różni się to od, powiedzmy, używania tablicy skrótów dla indeksu, która pozwala tylko szybko dostać się do określonego rekordu. W B-Tree można szybko dotrzeć nie tylko do konkretnego rekordu, ale także do punktu na posortowanej liście.
Rzeczywista mechanika przechowywania i indeksowania wierszy w bazie danych jest bardzo prosta i dobrze zrozumiana. Gra zarządza buforami i konwertuje SQL na wydajne ścieżki zapytań, aby wykorzystać te podstawowe idiomy przechowywania.
Następnie istnieje cała złożoność wielu użytkowników, blokowanie, rejestrowanie i złożoność transakcji na szczycie idiomu przechowywania.