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

MySQL множество индекси срещу индекс с няколко колони за търсене

Трябва да разберете в MySQL (в случая на InnoDB) той използва само най-левия префикс на вашите индекси. Така че, ако индексът е в поле 1 + поле 2, заявка само с поле 2 в КЪДЕ не може да използва целия индекс.

И ако Field1 + Field2 + Field3 е индексът, заявка само с Field1 & Field3 в КЪДЕ същото ще се случи.

Опция 1

Ще трябва да създадете отделен индекс за всеки сценарий на търсене, ако искате да оптимизирате всяко търсене. Въпреки това, ако таблиците са големи, тогава индексите също ще станат изключително големи. Ако тези заявки за търсене се правят много често, това би си струвало.

Вариант 2

Можете да използвате страхотен трик, ако вашите търсения имат ниска селективност (т.е. пол), като поставите колоните с ниска селективност най-вляво и използвате Gender IN(M, F) за да го включите в КЪДЕ клауза заедно с друга колона(и), за да се използва целият индекс.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Никога да не изтривате записи? Добра идея? Обичайно?

  2. Как мога да използвам mySQL replace() за заместване на низове в множество записи?

  3. Може ли SQL инжекцията да бъде предотвратена само с добавяне на наклонени черти (низ)?

  4. Изберете заявка с помощта на IN() и без никакво сортиране

  5. Какво казва стандартът на SQL за скобите в операторите на SQL UNION/EXCEPT/INTERSECT?