Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sollen wir die Sortierspalte, den Primärschlüssel im zusammengesetzten Index (MySQL) einschließen?

Die Antwort hängt von der verwendeten Engine ab:

  • MyISAM - das Hinzufügen einer ID zum Index kann und wird wahrscheinlich helfen
  • InnoDB - Primärschlüssel ist bereits Teil jedes Sekundärindexes, da innodb Zeilen in BTREE sortiert nach Primärschlüssel speichert und der Index Primärschlüssel benötigt, um auf die tatsächliche Zeile zu zeigen - in diesem Fall ist das Hinzufügen überflüssig, wenn er an letzter Stelle im Index steht ( aber dadurch wird es nicht zweimal hinzugefügt, also sollte es die Dinge nicht noch schlimmer machen). In einigen Fällen möchten Sie es vielleicht als nicht zuletzt hinzufügen, oder Sie haben mehrspaltige primäre Spalten und fügen Ihrem Index einige Spalten in einer anderen Reihenfolge hinzu - es sollte kein Problem damit geben, innodb hängt verbleibende Spalten von primär an diesen Index an. kann aber die zuvor hinzugefügten verwenden, ohne sie zu duplizieren)

Also Antworten:

  1. In InnoDB ist es unnötig, in MyISAM ist es gut, falls Sie diese Sortierung tatsächlich verwenden, wenn Sie sie nicht verwenden, macht das Hinzufügen diesen Index nur größer.
  2. Die Reihenfolge der Spalten in der Tabellendefinition und die Reihenfolge im Index sind getrennte Dinge, also ist es in Ordnung
  3. Ja, dieser Index scheint wirklich gut zu sein - aber Sie können es selbst mit ERKLÄREN , besteht die Möglichkeit einer noch besseren Leistung - "Covering Index “, aber das ist mit Kosten verbunden. Wenn die Abfrage also nicht kritisch und leistungsschwach ist, ist sie wahrscheinlich übertrieben.