Položili jste další otázku „Vytvoření indexu, který je nejlepší pro vyhledávání pomocí zástupných znaků prostřednictvím 40 milionů jmen“. Dobře, máte 40 milionů záznamů.
Nyní zvažte následující vzorec:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
Index na sloupci je mnohem lepší, čím blíže x
je na 1. Pokud je 1, všechny hodnoty jsou odlišné, neexistují žádné duplikáty a index je proto poměrně rychlý.
Nyní hledáte 'john%'. To jsou 4 písmena a otevřený konec. Která písmena nejsou důležitá, vaše DB se musí vypořádat s 26*26*26*26=456976 odlišnými hodnotami. Dejte to do výše uvedeného vzorce a svých 40 milionů záznamů. Získáte x
z 0,0114244.
Zase nevím, co je to práh, ale IIRC je 0,1 nebo tak něco. Pokud jste tedy x
je nad 0,1, použije se index, pokud je nižší, není.
Proč je to tak? Použití indexu může věci dokonce zpomalit, protože vaše databáze se musí podívat na index, vidět v tomto indexu, na které pozici na vašem fyzickém pevném disku je příslušný záznam, a pak tento záznam získat. Proto, když je x pod 10 %, je rychlejší provést skenování celé tabulky.
Abychom to shrnuli:Filtrovat 40 milionů záznamů pouze jedním slabým indexem, jako je ten váš, je prostě k ničemu.