Heim > Fragen und Antworten > Hauptteil
1, HintergrundbeschreibungIch habe eine Benutzertabelle, die Tabellenstruktur ist wie folgt: Der Index ist wie folgt: Die Daten in der Tabelle sind wie folgt :
Sie können sehen, dass die Daten in der Tabelle nach Nachname, Nachname und Stadt sortiert sind. Der Primärschlüssel (Index) für die Benutzer-ID wird später hinzugefügt, sodass die Benutzer-ID ungeordnet ist . Gibt es eine Möglichkeit, den Index in MySQL neu zu generieren (oder zu organisieren), sodass die Abfrageergebnisse der Anweisung „Benutzer-ID, Nachname vom Benutzer auswählen“ standardmäßig nach Benutzer-ID sortiert werden?
Hinweis: Anstatt die Verwendung des Index zu erzwingen, wählen Sie Benutzer-ID, Nachname aus Benutzer erzwingen Index (primär) aus, generieren oder organisieren Sie den Index neu (reorganisieren).
Aktualisiert am 29. April
Eigentlich möchte ich fragen, ob es in MySQL einen Befehl gibt, der die vorhandenen Indizes in der Tabelle neu organisieren kann. Das heißt, nachdem die Tabelle für einen bestimmten Zeitraum aktualisiert, gelöscht und eingefügt wurde, ändern sich die Daten Struktur bleibt unverändert), dann werden die Indizes der Tabelle entsprechend verschiedenen Änderungen unterzogen (z. B. zugrunde liegende Fragmentierung usw.). Gibt es also eine Möglichkeit, diese Indizes neu zu organisieren oder neu zu generieren? Andernfalls kann der Index nur gelöscht und neu erstellt werden.
Aktualisiert am 2. Mai
Ich habe die ursprüngliche Frage durchgestrichen. Es gab einige Probleme mit der ursprünglichen Frage, insbesondere ist die Beschreibung hier falsch: „Sie können sehen, dass die Daten in der Tabelle nach Nachnamen sortiert sind. Dies.“ Dies liegt daran, dass es einen mehrspaltigen Index für Nachname, Nachname und Stadt gibt und der Primärschlüssel (Index) für Benutzer-ID später hinzugefügt wird, sodass Benutzer-ID ungeordnet ist. Sie können sehen, dass die Daten in der Tabelle nach Nachname sortiert sind Das liegt daran, dass in lastname ein mehrspaltiger Index für Familienname und Stadt vorhanden ist und der Primärschlüssel (Index) für die Benutzer-ID später hinzugefügt wird, sodass die Benutzer-ID ungeordnet ist. Auf die Frage, warum sie ungeordnet ist, hat @clcx_1315 bereits geantwortet, und Er wies auch darauf hin, dass selbst wenn der Index neu organisiert (generiert) werden soll, dieser Satz „select userid, lastname from user“ keine Reihenfolge der userid erreichen kann. Ich habe Baidu durchsucht und es scheint, dass es keinen Befehl gibt, der speziell zum Neugenerieren oder Organisieren von Indizes in MySQL verwendet wird, aber es gibt einen Befehl in der SQL Server-Datenbank. Wenn Sie interessiert sind, wenden Sie sich bitte an Baidu.
怪我咯2017-05-18 10:54:38
这种情况是因为你主键外的其他列是一个复合索引,你查询的时候mysql就直接走索引表找到你的所有数据(mysql innodb普通索引会将主键信息一并存储),所以就是按照你索引首字段排序检索,他并不是按照录入磁盘顺序读取全表的,而主键则是按照磁盘录入顺序添加的,因此在磁盘上是顺序的,但是你读取的时候读的是索引表才会是不连续的
要改变这种状况的话你重建表也是一样的,仍然会按lastname得索引排序,除非你按照lastname的顺序录入
另外一个办法就是添加一个冗余字段,这时候再select全表的时候就不会走你的覆盖索引查询而是走全表扫描,当然就会主键渐顺序排列了。