4

mysqlクエリにインデックスを追加しています。以下はクエリです。

SELECT * 
FROM 
    JOBSEEKER 
WHERE 
    JOBSEEKER.VCEMAIL='godavary@gmail.com' 
    AND JOBSEEKER.ITJOBSEEKERSTATUS<>5 LIMIT 1

使用EXPLAIN

*************************** 1. row ***************************
       id: 1
select_type: SIMPLE
    table: JOBSEEKER
     type: ALL
possible_keys: NULL
      key: NULL
  key_len: NULL
      ref: NULL
     rows: 121702
    Extra: Using where
1 row in set (0.00 sec)

テーブルにインデックスを追加すると、次の結果が得られました。

*************************** 1. row ***************************
       id: 1
select_type: SIMPLE
    table: JOBSEEKER
     type: ref
possible_keys: EMAIL_I
      key: EMAIL_I
  key_len: 103
      ref: const
     rows: 1
    Extra: Using where
1 row in set (0.00 sec)

ここではキーの長さが非常に長いことがわかりますが、以前は何もありませんでした/NULLでした。インデックス作成後のクエリ実行時間が改善されます。

これは問題ありませんか、それともインデックスを作成する必要ITJOBSEEKERSTATUSがありますか?

4

2 に答える 2

4

key_lenプロパティは、(ご存知のように)インデックスで使用されるキーの長さです。元のテーブルのNULL値は、キーがまったくなかったため、インデックスがなかったことを意味します。この場合、「high」キー値は、インデックス作成に必要なバイト数を示します。これは、たとえば整数IDのようなものよりも、文字列(電子メールアドレスなど)を使用した方が高くなります。「長い」キーの長さにもかかわらず、インデックスを使用すると、MySQLが正しい行をより迅速に見つけるのに役立ちます。これは、実行時間が改善されたことからもわかります。

また、クエリがALL(全表スキャン-低速で、通常は回避したい)から(より良い-この場合、条件内refのこれらの行のみに一致している)になっていることがわかります。WHERE

真の専門家はこれをより明確に表現することができますが、一般的な考え方はそれが良いということです:)

于 2012-11-07T06:43:55.567 に答える
0

このkey_len列は、MySQLが使用することを決定したキーの長さを示しています。長さはNULL、キー列に。と表示されている場合NULLです。

于 2012-11-07T06:46:08.217 に答える