Zadałeś kolejne pytanie „Tworzenie indeksu, który najlepiej nadaje się do wyszukiwania z użyciem symboli wieloznacznych w 40 milionach nazw”. OK, masz 40 milionów rekordów.
Teraz rozważ następującą formułę:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
Indeks na kolumnie jest znacznie lepszy, im bliżej x
ma wartość 1. Jeśli wynosi 1, wszystkie wartości są różne, nie ma duplikatów, a zatem indeks jest dość szybki.
Teraz szukasz 'john%'. To 4 litery i otwarty koniec. Które litery nie są ważne, twój DB musi radzić sobie z 26*26*26*26=456976 różnymi wartościami. Umieść to w powyższym wzorze i swoich 40 milionach płyt. Otrzymujesz x
z 0,0114244.
Znowu nie wiem jaki jest próg, ale IIRC to 0,1 czy coś. Tak więc, jeśli jesteś x
jest powyżej 0,1 indeks jest używany, jeśli jest niższy, to nie.
Dlaczego to jest takie? Używanie indeksu może nawet spowolnić działanie, ponieważ twój DB musi spojrzeć na indeks, zobaczyć w tym indeksie, na której pozycji na twoim fizycznym dysku twardym znajduje się odpowiedni rekord, a następnie uzyskać ten rekord. Dlatego, gdy x jest poniżej 10%, szybsze jest wykonanie skanowania całej tabeli.
Podsumowując:filtrowanie 40 milionów rekordów za pomocą tylko jednego słabego indeksu, takiego jak twój, jest po prostu bezużyteczne.