2017-12-04 14 views
0

は私が使用方法MySQLのインデックス

CREATE TABLE test (id INT, age INT, INDEX(id,age)); 

DESCRIBE test;この与え、このクエリを使用してMySQLにインデックスを作成しようとしました:私はちょうどidは私が見つけたインデックスを付けた理由を見つけることを試みた

+-------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| id | int(11) | YES | MUL | NULL |  | 
| age | int(11) | YES |  | NULL |  | 
+-------+---------+------+-----+---------+-------+ 

2つ以上のもの。そのCREATE INDEXクエリでは、インデックスの名前が再クエリされ、USE INDEX()ステートメントが存在します。今

私の質問:

  1. は、最初のクエリが間違っているか、私は両方のIDとのペアのような年齢のインデックスを作成しなかった、それは単にIDをインデックス化することを示し、なぜですか?
  2. 最初のクエリと同じように(またはプライマリキーの列を設定するときなど)、名前を付けずにインデックスを作成できますか?
  3. インデックスを使用するたびにUSE INDEXを追加する必要がありますか?はいの場合は、デフォルトでインデックスが使用される状況があります(たとえば、可能であれば、名前のないインデックスを作成する場合など)。
+0

'MUL'は「multipart」を意味します。あなたの質問は大丈夫です。いいえ、あなたは 'インデックスを使う必要はありません。私はあなたの問題が何であるか理解していません。ドキュメントをお読みください。 – Bohemian

答えて

0

あなたのインデックスを持つテーブルのクエリを作成 - okです、あなたがあなたのインデックスが表示されますコマンド
SHOW INDEX FROM testを実行して、それを確認することができます。

一般に、独自の名前のインデックスを作成することをお勧めします(照会のように省略することもできます)。

そしてUSE INDEX - これはクエリのパフォーマンス最適化キーワードです。これはmysqlのキーが使えるようにするためのものです(何をしているのかをはっきりと理解していれば誰でも使用できます)。

0

SHOW CREATE TABLE; DESCRIBEより説明的です!

あなたが提示したDESCRIBEは、INDEX(id,age)の存在に同意しません。

通常、idはテーブルのPRIMARY KEYです。あなたは伝統と壊れてしまった。あなたの意図が何であるか説明してください。

USE INDEXまたはFORCE INDEXを使用しないでください。「今日」に役立つかもしれませんが、「明日」を傷つける可能性があります。オプティマイザは、使用するインデックス(がある場合)をインデックスに決定させます。

あなたはスキーマを批判することはできません。あなたがそれに対して何を使用するかを知らなければなりません。

すべてのテーブルはPRIMARY KEYである必要があります。注:PKは定義上(MySQLの場合)UNIQUEINDEXです。

インデックスの名前はほとんどありません。インデックスに名前を付けないと、名前が生成されます。インデックスがDROPpingの場合は名前が必要です。

関連する問題