【问题标题】:What does a high key_len value indicate in optimizing a MySQL query?在优化 MySQL 查询时,高 key_len 值表示什么?
【发布时间】:2012-10-27 04:41:34
【问题描述】:

我正在向 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

【问题讨论】:

    标签: mysql query-optimization indexing


    【解决方案1】:

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

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

    一个真正的专家将能够更好地表达这一点,但一般的想法是它很好:)

    【讨论】:

    • 但我在某处读到高 key_lenght 不好。但它比拥有 NULL 更好
    • @NaanuManu 对,在你的情况下,我想你有一个更大的密钥长度,因为你选择索引的字段(一个电子邮件地址需要更多的字节来索引,比如说,一个六位数的整数)。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多