Mysql索引长度计算

(root:hostname:Fri May 29 14:10:50 2015)[liangxl]> show create table liang_2;
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
| Table   | Create Table                                                                                                                                                
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
| liang_2 | CREATE TABLE `liang_2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `addr` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ind_liang_2_name` (`name`(5)),
  KEY `ind_liang_2_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 |
+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)
(root:hostname:Fri May 29 14:10:56 2015)[liangxl]> create index ind_liang_2_addr on liang_2(addr);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
(root:hostname:Fri May 29 14:11:13 2015)[liangxl]> explain select * from liang_2 where addr='asdsdadasdads';
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
| id | select_type | table   | type | possible_keys    | key              | key_len | ref   | rows | Extra       |
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | liang_2 | ref  | ind_liang_2_addr | ind_liang_2_addr | 62      | const |    4 | Using where |
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
(root:hostname:Fri May 29 14:11:32 2015)[liangxl]> explain select * from liang_2 where email='asas@ss';     
+----+-------------+---------+------+-------------------+-------------------+---------+-------+------+-------------+
| id | select_type | table   | type | possible_keys     | key               | key_len | ref   | rows | Extra       |
+----+-------------+---------+------+-------------------+-------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | liang_2 | ref  | ind_liang_2_email | ind_liang_2_email | 63      | const |    4 | Using where |
+----+-------------+---------+------+-------------------+-------------------+---------+-------+------+-------------+
1 row in set (0.01 sec)
(root:hostname:Fri May 29 14:11:51 2015)[liangxl]> explain select * from liang_2 where name='aaaab';   
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
| id | select_type | table   | type | possible_keys    | key              | key_len | ref   | rows | Extra       |
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
|  1 | SIMPLE      | liang_2 | ref  | ind_liang_2_name | ind_liang_2_name | 18      | const |    1 | Using where |
+----+-------------+---------+------+------------------+------------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
(root:hostname:Fri May 29 14:12:25 2015)[liangxl]> \s;
Server characterset:    utf8
Db     characterset:      utf8
Client characterset:      utf8
Conn.  characterset:    utf8

结论:

1、int:固定占用4个字节

2、不同字符集占用字节数不同:

3、latin1:2个字节

4、utf8:3个字节

5、是否为空占用1个字节,not null不占用字节

6、变长字段需要记录长度占用2个字节

7、索引长度计算公式:varchar(20)*3+1+2=63

原文发布于微信公众号 - MYSQL轻松学(learnmysql)

原文发表时间:2015-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP技术

mysql

cross join :笛卡尔交集。 Inner join :内连接。 left join :只要满足左边表的需求就可以了,右表有无都可以。 right ...

3468
来自专栏互联网开发者交流社区

复杂SQL代码实例

922
来自专栏大内老A

Audit Logging-Stored Procedure

1. T_ORDER For Insert: sp_order_i IF EXISTS (SELECT * FROM sysobjects WHERE type...

1867
来自专栏乐沙弥的世界

Oracle 索引监控与外键索引

      Oracle 监控索引特性为我们提供了一个大致判断索引是否被使用的情形。之所以这么说,是因为在Oracle 10g 中收集统计信息时会导致索引被监控...

642
来自专栏数据库新发现

Oracle9i新特性-使用DBMS_METADATA包获得对象DDL语句

从Oracle9i开始Oracle提供了一个新的系统包DBMS_METADATA,可以用于提取对象创建的DDL语句。

762
来自专栏乐沙弥的世界

PL/SQL --> INSTEAD OF 触发器

INSTEAD OF 触发器常用于管理编写不可更新的视图,INSTEAD-OF触发器必须是行级的。

562
来自专栏杨建荣的学习笔记

关于物化视图疑问(32天)

--初始化操作, 创建两个用户一个,testo,一个test. 在testo上创建表,test上创建物化视图。 SQL> create user testo ...

3205
来自专栏Python攻城狮

PostgreSQL语法、连接

博客地址:https://ask.hellobi.com/blog/zhiji 欢迎大家来交流学习。

771
来自专栏杨建荣的学习笔记

关于索引和空值的讨论(r3笔记第80天)

在日常的工作中,空值总是有特殊的身份,对于它的处理有时候也是比较纠结。 有时候创建索引的时候会因为空值出现一些奇怪的结果。 有时候一个简单的查询因为空值却走不了...

2656
来自专栏代码小睿

Medoo个人修改版

  Medoo是一款轻量级的php数据库操作类,下面不会介绍Medoo的使用方法,想学习Medoo请前往官网自学:http://medoo.in/   在接触M...

2007

扫描关注云+社区