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 回答