1、背景説明ユーザー テーブルがあります。テーブル構造は次のとおりです:
インデックスは次のとおりです: テーブル内のデータは次のとおりです:
テーブル内のデータが姓で並べ替えられていることがわかります。これは、姓、姓、市区町村に複数列のインデックスがあり、ユーザー ID の主キー (インデックス) が後で追加されるためです。したがって、userid は連続なしです。 mysql でインデックスを再生成 (または整理) して、「select userid, lastname from user」ステートメントのクエリ結果がデフォルトで userid でソートされるようにする方法はありますか?
注: ユーザー強制インデックス (プライマリ) からユーザー ID、姓を選択してインデックスの使用を強制する代わりに、インデックスを再生成または編成 (再編成) します。
4月29日更新
実は、テーブル内の既存のインデックスを再編成できるコマンドが mysql にあるかどうかを聞きたいのですが、テーブルが一定期間更新、削除、挿入されると、データが変更されます。 (構造が変更されていない)、テーブルのインデックスはそれに応じてさまざまな変更を受けます (基礎的な断片化など)。では、これらのインデックスを再編成または再生成する方法はありますか? それ以外の場合、インデックスは削除して再構築することしかできません。 。
5 月 2 日の更新
元の質問に取り消し線を追加しました。最初の質問にはいくつか問題があり、特にここの説明が間違っています: 「データが表示されます」テーブル内のデータは姓でソートされています。これは、姓、家族名、市区町村に複数列のインデックスがあるためです。ユーザー ID の主キー (インデックス) は後で追加されるため、ユーザー ID は順序付けされていません。テーブルは姓でソートされています。これは、姓、姓、市区町村に複数列のインデックスがあり、ユーザー ID の主キー (インデックス) が後で追加されるため、ユーザー ID は順序付けされていないためです。」、その理由については、 is unowned 、@clcx_1315がすでに回答しています。また、インデックスが再編成(生成)されても、select userid, lastname from userという文はuseridの順序付けを達成できないことも指摘しました。 Baidu で検索してみたところ、MySQL にはインデックスの再生成や整理に特化したコマンドはないようですが、SQL Server データベースにはコマンドがあるようですので、興味のある方はBaidu を調べてみてください。
阿神2017-05-18 10:54:38
mysqlにはテーブルの最適化という使い方がありますが、同時にテーブルの再編成も行います。
システムに明らかなビジネスのピーク期間がある場合は、インデックスを削除して再構築することも可能です。
怪我咯2017-05-18 10:54:38
この状況は、主キー以外の他の列が複合インデックスであるためです。クエリを実行すると、mysql はすべてのデータを検索するためにインデックス テーブルに直接アクセスします (mysql innodb の通常のインデックスは主キー情報を一緒に保存します)。インデックスの最初のフィールドは、ディスクに入力された順序に従ってテーブル全体を読み取るわけではないため、ディスクに入力された順序に従って追加されます。この状況を変更したい場合は、姓のインデックスによってソートされます。別の方法は、冗長フィールドを追加してからすべてを選択することです。テーブルを参照するときは、カバー インデックス クエリではなく、テーブル全体のスキャンを使用します。順番に並べられます。
伊谢尔伦2017-05-18 10:54:38
mysql もインデックスの状況に基づいてインデックスを自動的に再構築することを覚えていますが、具体的には何も見つかりませんでした。
答えてくれる運命の人に任せてください