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

ефективно подреждане на ключове в съставен индекс на MySQL (WRT Rails Polymorphic асоциации и STI)

От моето собствено проучване (но не съм експерт по DBA) научих, че има две неща, които трябва да се вземат предвид, когато се взема решение за реда на комбинирания ключов индекс.

Първо, по отношение на мощността на колоните, индексът обикновено е по-добър при търсене на колони с висока мощност. Така че бих бил склонен да поставя колоната с най-висока мощност на първо място в индекса. За справка има статия, озаглавена MySQL Query Optimization което гласи:

Във вашия случай _id Колоните очевидно биха отговаряли по-добре на тази дефиниция, така че те са по-добър кандидат за префикс на ключа.

Друго нещо, което трябва да имате предвид, е възможността за повторна употреба на тези индекси. Повечето (ако не всички) системи за бази данни позволяват повторно използване на префикс на съставен ключ. Например съставен ключ на (owner_id, owner_type) може да се използва и от заявки за owner_id но не и на owner_type .

Така че от това, което обяснихте във вашия въпрос, може да е по-добре с два индекса:съставен ключов индекс на (owner_id, owner_type) и друг на (owner_type) .

И накрая, наистина всичко се свежда до вашия набор от данни и заявки. Изпробвайте множество сценарии, бенчмаркове, използващи различни съставни ключове, за да видите кое е най-оптималното решение. Също така, не забравяйте, че индексите носят наказание за запис на вашите таблици.

Актуализиране :Има и друг доста популярен SO въпрос относно съставния ключов индекс там:

Кога трябва да използвам съставен индекс?



  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. Вмъкване на json кодирани данни в mysql

  3. Грешка, когато се опитам да свържа игра с mysql 5.5

  4. Множество бази данни и транзакции

  5. Функция за агрегатиране на MYSQL масив като PostgreSQL array_agg