2016-07-20 11 views
0

注:この質問が以前に聞かれたかどうかを調べるために検索しました。私が見つけることができた既存の質問はすべて、複合インデックスの順序付け、または既存のテーブルのクエリの列の順序付けを求めています。CREATE TABLE文のKEYの順序は重要ですか?

は、私は次の表を持って言ってやるがいい。

CREATE TABLE `foobar` (
    `foo_id` int(11), 
    `bar_id` int(11), 
    KEY `foo_id` (`foo_id`), 
    KEY `bar_id` (`bar_id`) 
); 

それはそれで2つの無関係なインデックスを持っています。私は2つのインデックスの定義を交換した場合、それは次のようになります。

CREATE TABLE `foobar` (
    `foo_id` int(11), 
    `bar_id` int(11), 
    KEY `bar_id` (`bar_id`), 
    KEY `foo_id` (`foo_id`) 
); 

を、私はこれらのそれぞれにSHOW CREATE TABLE foobarを実行する場合、私は各テーブルのKEY秒の順序に差があることがわかります。私の質問は、この特定の場合の注文は重要なのでしょうか? foo_idbar_idがコンポジットインデックスで一緒に使用された場合は問題になることはわかっていますが、ここではそうではありません。

本当に問題がある場合は、テーブルが作成されたら、キーを任意に再配置する方法がありますか? (ALTER TABLE foobar ADD INDEX foo_id (foo_id) AFTER bar_idに似たものがありますが、私は書かれているようには間違いないと確信しています)

答えて

1

キーの視覚的表現はありません。キー設定機能は、既存の列に品質を追加するだけで、再配置することができます。

唯一の例外は、いくつかのIDE(DB Forge、HeidiSQL、SequelProなど)を使って、キー値を生成したリストの先頭に配置した場合です。しかし、これはシステム側で解釈しており、データベースのパフォーマンスとは関係ありません。あなたが使用することができます

-1

は、すべてのキーが '同じ' であり

ALTER TABLE table_name MODIFY foo_id int AFTER bar_id 
+0

私は_columns_を並べ替えようとしていません。_indexes_の順序が重要かどうか、もしそうなら、並べ替える方法が不思議です。 – smitelli

+0

あなたの質問を理解できませんでした。今私はこれも探しています。 –

0

altertable comanadに変更します。どちらを使用するかは、すべてが考慮されます。最もコストが低いキーが使用されます。 ( 'コスト'は、クエリを別の方法で実行するという複雑な方法です)

InnoDBを使用している場合は、PRIMARY KEYを使用することをお勧めします。 http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table

関連トピック:あなたのテーブルには、「多対多」マッピングテーブルがある場合

は、ここにさらに助言である「複合」インデックスは複数の列を有するものです。 (例:INDEX(a,b)。)列の順番はとなります。となります。

関連する問題