Tworzę indeksy bez klauzuli "USING BTREE". Czy jest jakaś korzyść z używania indeksu BTREE?przewaga BTREE?
CREATE INDEX `SomeName` USING BTREE ON `tbl_Name`(`column_name`);
Tworzę indeksy bez klauzuli "USING BTREE". Czy jest jakaś korzyść z używania indeksu BTREE?przewaga BTREE?
CREATE INDEX `SomeName` USING BTREE ON `tbl_Name`(`column_name`);
BTREE jest domyślną metodą indeksu. Możesz go bezpiecznie pominąć.
To naprawdę zależy od silnika pamięci masowej. –
To nieprawda w przypadku wszystkich silników pamięci masowej. –
To zależy od używanego mechanizmu magazynowania. Dla większości BTREE jest domyślny, więc podanie go tak naprawdę niczego nie zmienia. W przypadku silników magazynujących, takich jak MEMORY/HEAP i NDB, domyślnie używane są indeksy HASH domyślnie.
Więcej informacji można znaleźć here.
To, czy B-drzewo lub indeks HASH jest korzystne dla ciebie z perspektywy wydajność zależy od danych i jak masz dostępu do niego. Jeśli wiesz, że twoje zapytania będą dotyczyć dokładnie jednego wiersza lub rozrzuconych pojedynczych wierszy, przydatny może być indeks HASH. Niezależnie od tego, generalnie wolę indeks BTREE, ponieważ dane są sortowane, dzięki czemu zapytania o zakres i te, które zwracają wiele wierszy, są bardziej wydajne.
Po pierwsze, w zależności od używanego mechanizmu pamięci masowej, możesz po prostu nie mieć wyboru (InnoDB na przykład używa tylko Btree dla swojego indeksu).
Ponadto, BTREE jest domyślnym typem indeksu dla większości silników pamięci masowej.
Teraz ... Istnieją przypadki, w których używanie alternatywnych typów indeksów może poprawić wydajność. Są (stosunkowo rzadkie przypadki), kiedy indeks HASH może pomóc. Należy pamiętać, że po utworzeniu indeksu HASH tworzony jest również indeks BREEF. Częściowo wynika to z faktu, że indeksy hash mogą jedynie rozwiązywać predykaty równości. (warunek taki jak WHERE Price> 12.0 nie mógł być obsłużony przez indeks hash).
W skrócie: Używaj BTREE, bez względu na to, czy jest to domniemanie (jeśli BTREE jest domyślnym dla używanego Storage), czy jawnie. Dowiedz się o innych typach indeksów, abyś wiedział o nich, gdyby zaszła taka potrzeba.
Edycja: (w poszukiwaniu przypadki, można użyć innych rodzajów Index)
skutecznie w przypadku jest raczej prosty do RTREE indeksów. Są one obsługiwane tylko z MySQL w kontekście "SPATIAL" databases, tj. Bazy danych, które zawierają kontekst położenia geograficznego, taki jak Point i inny obiekt w modelu GIS).
Indeksy HASH są bardziej ogólne (nie ograniczają się do konkretnego zastosowania lub typu danych) i ogólnie można śledzić intuicyjne rozumienie skrótów, aby uzyskać wskazówkę, kiedy mogą one być lepsze od starego, ale wiernego BŁĘDU. Jak wskazano wcześniej, oznaczałoby to, że kolumny są zwykle wyszukiwane z równym predykatem. Zgaduję, że stosunkowo krótkie tabele przeglądowe i podobne mogą przynieść korzyści, w zależności od skutecznej implementacji w MySQL.
W jaki sposób możemy zmusić MySQL do tworzenia tylko indeksu hash, a nie indeksu btree, jeśli nie potrzebujemy sortowania? (na przykład klucz podstawowy, który nie musi być sortowany) – Pacerier
przeszukiwanie zrównoważonego drzewa oznacza, że wszystkie liście mają tę samą głębokość. Na górze nie ma wskaźnika drogi startowej. Rzeczywiście, nawet większe B-drzewa mogą zagwarantować pobranie niewielkiej liczby węzłów w celu znalezienia danego klucza. Na przykład drzewo B z 10 000 000 kluczy z 50 kluczami na węzeł nigdy nie musi pobierać więcej niż 4 węzły, aby znaleźć dowolny klucz. Drzewo B jest specjalnym formatem struktury danych dla indeksu, który umożliwia szybki dostęp do danych w indeksie. Jedną z właściwości tej struktury danych jest to, że indeks jest zawsze saldem. Oznacza to, że każdy węzeł na najniższym poziomie jest równoodległy od najwyższego węzła lub węzła głównego drzewa. Każda strona indeksu ma tę samą liczbę węzłów. Węzły na najniższych poziomach są znane jako węzły liści. Wszystkie inne węzły są znane jako węzły rozgałęzień. Punkty graniczne do innych gałęzi lub węzłów liści.Węzły liści przechowują wartości indeksowanych kolumn i rowidów wskazujących na odrębny wiersz, który ma te wartości. Rzeczywisty rozkład będzie zależał od liczby wartości danych w każdym zakresie wartości w drzewie B, a ogólny cel ma na celu zmniejszenie liczby wymaganych poziomów, które muszą zostać przetransmitowane, aby uzyskać określoną wartość. Zaletą struktury drzewa B jest:
Uproszczona odpowiedź brzmi, jeśli twój SQL używa instrukcji LIKE na tym polu, to używanie indeksu BTREE powinno przewyższać indeks Hash. Jeśli używasz równań (=) dla tego pola, pozostań przy Indeksie haszysz.
Strona podręcznika MySQL, którą chcesz, to [tutaj] (http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html). – dnagirl