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

Има ли значение редът на полетата на многоколоновия индекс в MySQL

Когато обсъждам индекси с няколко колони, използвам аналогия с телефонния указател. Телефонният указател е основно указател на фамилията, след това на собственото име. Така че редът на сортиране се определя от това коя "колона" е първа. Търсенията попадат в няколко категории:

  1. Ако потърсите хора, чието фамилно име е Смит, можете лесно да ги намерите, защото книгата е сортирана по фамилно име.

  2. Ако потърсите хора, чието име е Джон, телефонният указател не помага, защото Джоните са разпръснати из цялата книга. Трябва да сканирате целия телефонен указател, за да ги намерите всички.

  3. Ако потърсите хора с конкретна фамилия Смит и конкретно собствено име Джон, книгата ви помага, защото намирате Смит, подредени заедно, а в рамките на тази група Смит, Джоните също се намират в сортиран ред.

Ако имате телефонен указател, сортиран по име, а след това по фамилия, сортирането на книгата ще ви помогне в горните случаи #2 и #3, но не и случай #1.

Това обяснява случаите за търсене на точни стойности, но какво ще стане, ако търсите нагоре по диапазони от стойности? Да речем, че искате да намерите всички хора, чието име е Джон и чието фамилно име започва с 'S' (Смит, Сондърс, Стонтън, Шърман и др.). Johns са сортирани под „J“ във всяко фамилно име, но ако искате всички Johns за всички фамилни имена, започващи с „S“, Johns не са групирани заедно. Те са разпръснати отново, така че в крайна сметка се налага да сканирате всички имена с фамилно име, започващо с „S“. Докато ако телефонният указател беше организиран по собствено име, а след това по фамилия, ще намерите всички Джони заедно, а след това в рамките на Джони, всички фамилни имена на „S“ ще бъдат групирани заедно.

Така че редът на колоните в индекс с няколко колони определено има значение. Един тип заявка може да се нуждае от определен ред на колоните за индекса. Ако имате няколко типа заявки, може да се нуждаете от няколко индекса, за да им помогнете, с колони в различен ред.

Можете да прочетете моята презентация Как да проектирате индекси, наистина за повече информация.



  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. Как създавате подготвени изявления с mysql2 gem?

  3. Как да преобразуваме броя на седмицата в дата?

  4. Как да свиете/изчистите ibdata1 файл в MySQL

  5. Предупреждение:mysqli::mysqli():(HY000/1045):Достъпът е отказан за потребител 'database'@'localhost' (използвайки парола:NO) в