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

Ще бъде ли достатъчен съставен индекс с втора колона с ниска кардиналност, за да се използва?

Разходите за поддържане на индекс (с една колона или с няколко колони) почти винаги се компенсират от подобрението на производителността, когато този индекс се използва. Това е малка стъпка на всеки INSERT /DELETE , плюс цена, ако промените стойността на индексирано поле чрез UPDATE . (UPDATE случаят е рядък.) Така че не се притеснявайте за разходите за „поддържане на съставен индекс“.

WHERE `vehicles`.`type` IN ('Car')
  AND `vehicles`.`user_id` = 10

изисква INDEX(user_id, type) .

Оптимизаторът ще

  1. открийте, че този индекс е възможен кандидат,
  2. проверете някои статистики, тогава
  3. или използвайте индекса, или решете, че кардиналността е лоша и просто сканирайте таблицата.

Включете индекса; не се тревожи за това.

Подредих полетата по този начин, а не (type, user_id) въз основа на вашия IN , което означава, че понякога може да имате множество стойности за type .

Ако всички редове в таблицата имат type = 'Car' , няма проблем. Всичко, което казах, все още е в сила. Загубата на включване на ненужния type е незначителен.

По-добре е всички "=" колони да са първо в индекс, а след това най-много едно друго поле. Допълнителна дискусия тук .




  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. sequelize - Не може да се добави ограничение за външен ключ

  3. Записване на началото на сесията на 1 страница или на всички страници?

  4. SQL номерираща колона - MySQL

  5. Убиване на MySQL заявка по време на изпълнение с PHP и AJAX