高key_len值在优化MySQL查询时表示什么?

时间:2012-11-07 06:39:38

标签: mysql query-optimization indexing

我正在为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编入索引?

2 个答案:

答案 0 :(得分:4)

key_len属性(如您所知)是索引中使用的密钥的长度。原始表中的NULL值表示根本没有键,因此没有索引。在这种情况下,“高”键值表示索引所需的字节数,例如,使用字符串(例如电子邮件地址)比使用整数ID更高的字节数。尽管“长”密钥长度,使用索引可以帮助MySQL更快地找到正确的行,这可以通过改进执行时间来证明。

此外,您可以看到您的查询从ALL(全表扫描 - 缓慢且通常要避免)到ref(更好 - 在这种情况下,您只匹配您的那些行在这种情况下WHERE条件。)

真正的专家能够更好地表达这一点,但总体思路是它很好:)

答案 1 :(得分:0)

key_len列表示MySQL决定使用的密钥长度。如果关键列显示NULL,则长度为NULL