zoukankan      html  css  js  c++  java
  • mysql explain中key_len值的说明

    在mysql 的explain的输出中,有个key_len的列,其数据是如何计算的呢?

    在看到了淘宝的dba以前发布的博客后,我在mysql 5.6上操作一番,了解了一点。

    环境准备 – 创建表。

    use test;
    
    drop table if exists test_keylen;
    
    create table test_keylen (
        id int not null,
        name1 char(20),
        name2 char(20),
        create_time timestamp default current_timestamp,
        update_time datetime default now(),
        primary key (id),
        key index_name (name1 , name2),
        key index_createtime (create_time),
        key index_updatetime (update_time)
    )  engine=innodb charset=gbk;
    
    insert into test_keylen(id,name1,name2) values(1,'name11','name12');
    insert into test_keylen(id,name1,name2) values(2,'name21','name22');

    我的环境如下:

    mysql> show variables like "ver%";
    +-------------------------+----------+
    | Variable_name           | Value    |
    +-------------------------+----------+
    | version                 | 5.6.22   |
    | version_comment         | Homebrew |
    | version_compile_machine | x86_64   |
    | version_compile_os      | osx10.9  |
    +-------------------------+----------+
    4 rows in set (0.00 sec)

    可以看到sql定义table时,datetime类型数据支持default设置为now(),结果也正常。

    查看key_len值

    char型的索引

    mysql> explain select * from test_keylen where name1='name11'G;  
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test_keylen
             type: ref
    possible_keys: index_name
              key: index_name
          key_len: 41
              ref: const
             rows: 1
            Extra: Using index condition
    1 row in set (0.00 sec)

    这个查询使用的index为2个char(20), key_len 是20+20+1,其中的1是字符串尾部的’’;

    int型的索引

    mysql> explain select * from test_keylen where id=1 G;  # key_len: 4 -- int
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test_keylen
             type: const
    possible_keys: PRIMARY
              key: PRIMARY
          key_len: 4
              ref: const
             rows: 1
            Extra: NULL
    1 row in set (0.00 sec)

    这个索引使用的是int类型的主键,key-len 为4,输出的type为const。

    tiemstamp类型索引

    mysql> explain select * from test_keylen where create_time>"2015-10-01" G;  # key_len: 4 -- timestamp 
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test_keylen
             type: range
    possible_keys: index_createtime
              key: index_createtime
          key_len: 4
              ref: NULL
             rows: 2
            Extra: Using index condition
    1 row in set (0.00 sec)

    这里的索引类型为timestamp,key-len为4 。而且可以看到输出的type为range。

    索引类型为datetime

    mysql> explain select * from test_keylen where update_time>"2015-10-01" G;
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test_keylen
             type: range
    possible_keys: index_updatetime
              key: index_updatetime
          key_len: 6
              ref: NULL
             rows: 2
            Extra: Using index condition
    1 row in set (0.00 sec)

    从结果中看到key-len为6。

  • 相关阅读:
    react 滑动删除组件
    004-Java进制转换
    003-JavaString数据类型
    002-Java数据类型
    001-Java命名规范
    【leetcode】804
    【MySQL】基本语句
    【python】
    hiveSql常见错误记录
    【数据库】-基本特性
  • 原文地址:https://www.cnblogs.com/shamo89/p/8335386.html
Copyright © 2011-2022 走看看