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。

  • 相关阅读:
    极域电子教室 e-Learning Class V4 2010专业版 学生机 卸载方法
    浅谈IT员工管理
    apacheserver下载、安装、配置
    Android BLE开发之Android手机搜索iBeacon基站
    Qt编程18:Qt调色板QPalette的使用
    二叉树的操作
    Android应用开发多语言drawable目录
    Mybatis文档阅读笔记(明日继续更新...)
    《Spark快速大数据分析》—— 第六章 Spark编程进阶
    Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统
  • 原文地址:https://www.cnblogs.com/shamo89/p/8335386.html
Copyright © 2011-2022 走看看