【问题标题】:Understanding MySQL key_len in Explain Statement在解释语句中理解 MySQL key_len
【发布时间】:2011-10-04 05:00:20
【问题描述】:

根据MySQL websitekey_len 列表示 MySQL 决定使用的密钥的长度。如果键列显示NULL,则长度为NULL。请注意,key_len 的值使您能够确定 MySQL 实际使用的多部分键的多少部分。

使用我的 previous question 中的示例,我有一个 EXPLAIN SELECT 语句,它显示 MySQL 使用 Indexkey_len: 6。下面显示了使用的索引和列的组成。

`Type` char(1) NOT NULL,
`tn` char(1) NOT NULL DEFAULT 'l',
`act` tinyint(1) unsigned NOT NULL DEFAULT '0',
`flA` mediumint(6) unsigned NOT NULL DEFAULT '0',
KEY `Index` (`Type`, `tn`, `act`, `flA`)

那么key_len 的值如何让我确定我的查询使用了多部分键的前三个部分?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    key_len 指定 MySQL 从 key 使用的字节数。
    索引总是使用 left_to_right。即只使用最左边的部分。

    您的字段长度如下:

    1 byte             `Type` char(1) NOT NULL,
    1 byte             tn char(1) NOT NULL DEFAULT 'l',
    1 byte             act tinyint(1) unsigned NOT NULL DEFAULT '0',
    3 bytes            flA mediumint(6) unsigned NOT NULL DEFAULT '0',
    1+1+1+3 = 6 bytes  KEY `Index` (`Type`, `tn`, `act`, `flA`)
     key usage always starts here ---^^^^^
    

    如果 key_len = 3,那么它使用的是type+tn+act
    请注意,在此配置中 Key_len = 4 是不可能的。

    【讨论】:

    • mediumint 如果我没记错的话是 3 个字节。
    • @ypercube,你说的很对,3 字节 int 类型的怪异使我更胜一筹。
    • @All,mediumint 的 3 个字节是正确的。
    • 还有一个问题,为什么我在ref 列中得到NULL 而不是const,const,const,const
    • 如果列可以为空,大小会改变吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2014-06-05
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多