我正在为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
编入索引?
答案 0 :(得分:4)
key_len
属性(如您所知)是索引中使用的密钥的长度。原始表中的NULL
值表示根本没有键,因此没有索引。在这种情况下,“高”键值表示索引所需的字节数,例如,使用字符串(例如电子邮件地址)比使用整数ID更高的字节数。尽管“长”密钥长度,使用索引可以帮助MySQL更快地找到正确的行,这可以通过改进执行时间来证明。
此外,您可以看到您的查询从ALL
(全表扫描 - 缓慢且通常要避免)到ref
(更好 - 在这种情况下,您只匹配您的那些行在这种情况下WHERE
条件。)
真正的专家能够更好地表达这一点,但总体思路是它很好:)
答案 1 :(得分:0)
key_len
列表示MySQL决定使用的密钥长度。如果关键列显示NULL
,则长度为NULL
。