Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL оптимизиране на заявка на LIKE term% ORDER BY int

Зададохте друг въпрос „Създаване на индекс, който е най-добър за търсене със заместващи знаци през 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 милиона записа само с един слаб индекс като вашия е просто безполезно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Изберете последните вмъкнати записи без първичен идентификатор или поле за дата

  2. Имам настройка на супернабор на mysql и apache на докери и свързан с мостова мрежа, какъв ще бъде URI на SQLAlchemy?

  3. Как да съпоставя две стойности от 1 колона в MYSQL

  4. PHP заявката не връща резултати

  5. Как да ограничите или приоритизирате заявка в MySql