Зададохте друг въпрос „Създаване на индекс, който е най-добър за търсене със заместващи знаци през 40 милиона имена“. Добре, имате 40 милиона записа.
Сега разгледайте следната формула:
x = COUNT(DISTINCT values in a column) / COUNT(values in a column)
Индексът в колона е толкова по-добър, колкото по-близо е x
е 1. Ако е 1, всички стойности са различни, няма дубликати и следователно индексът е доста бърз.
Сега търсите „john%“. Това са 4 букви и отворен край. Кои букви не са важни, вашата DB трябва да се справи с 26*26*26*26=456976 различни стойности. Поставете това в горната формула и вашите 40 милиона записа. Получавате x
от 0,0114244.
Не знам отново какъв е прагът, но IIRC е 0,1 или нещо такова. Така че, ако сте x
е над 0,1 се използва индексът, ако е по-нисък, не е.
Защо така? Използването на индекс може дори да забави нещата, защото вашата DB трябва да погледне индекса, да види в този индекс на коя позиция на вашия физически твърд диск е подходящият запис и след това да вземе този запис. Следователно, когато x е под 10%, е по-бързо просто да направите сканиране на цялата таблица.
За да обобщим:филтрирането на 40 милиона записа само с един слаб индекс като вашия е просто безполезно.