[MySQL] mysql索引的长度计算和联合索引「建议收藏」

[MySQL] mysql索引的长度计算和联合索引「建议收藏」1.所有的索引字段,如果没有设置not null,则需要加一个字节。2.定长字段,int占4个字节、date占3个字节、char(n)占n个字符。3.变长字段,varchar(n),则有n个字符+两个

[MySQL] mysql索引的长度计算和联合索引

1.所有的索引字段,如果没有设置not null,则需要加一个字节。
2.定长字段,int占4个字节、date占3个字节、char(n)占n个字符。
3.变长字段,varchar(n),则有n个字符+两个字节。
4.不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用1个字节,gbk编码的,一个字符占用2个字节,utf8编码的,一个字符占用3个字节。 utf8mb4是一个字符占4个字节
5.使用explain语句查询到的key_len字段,可以适用于上面的计算规则,可以看到查询是否使用到了联合索引
6.mysql优化器会对条件中的 and的前后顺序根据多列索引顺序自动纠正过来

通过索引的长度查看下面sql语句是否使用到了索引
CREATE TABLE `index_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT “”,
`gid` int(11) NOT NULL DEFAULT “0”,
`age` int(11) NOT NULL DEFAULT “0”,
`score` int(10) unsigned NOT NULL DEFAULT “0”,
PRIMARY KEY (`id`),
KEY `name_gid_age_index` (`name`,`gid`,`age`),
KEY `score_index` (`score`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
insert into index_test values(null,”taoshihan”,2,1,0);
insert into index_test values(null,”taoshihan”,2,2,0);
insert into index_test values(null,”taoshihan”,2,3,0);

explain select * from index_test where name=”taoshihan” group by gid;
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+
| 1 | SIMPLE | index_test | NULL | index | name_gid_age_index | name_gid_age_index | 310 | NULL | 6 | 66.67 | Using where |
+—-+————-+————+————+——-+——————–+——————–+———+——+——+———-+————-+

key_len的长度是310,也就是100*3+2 + 4 +4

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10001.html

(0)
上一篇 2023-01-27
下一篇 2023-01-27

相关推荐

  • 高质量SQL书写的30条建议

    高质量SQL书写的30条建议 前言 本文将结合实例demo,阐述30条有关于优化SQL的建议,多数是实际开发中总结出来的,希望对大家有帮助。 1、查询SQL尽量不要使用select *,而是select具体字段。 反例子…

    2023-03-20
    154
  • 用Python实现重复执行的方法

    用Python实现重复执行的方法在编程实践中,经常会需要重复执行一段代码。例如,需要在一个列表中查找特定元素,需要对输入的多个文件执行相同的操作等等。通常,程序员会使用循环语句来实现这种重复执行的功能。Python作为一门高级编程语言,提供了多种循环语句来满足不同的需求。

    2024-08-19
    28
  • 通过shell检查mysql主机和数据库,生成html报表的脚本[通俗易懂]

    通过shell检查mysql主机和数据库,生成html报表的脚本[通俗易懂]该脚本主要用于大致诊断MYSQL主机和数据库配置及性能收集,脚本部分功能展示如下: 郑州不孕不育医院:http://mobile.03913882333.com/ 郑州输卵管造影费用是多少:http…

    2023-02-20
    134
  • 深入了解Python字典的值(Value)用法和技巧

    深入了解Python字典的值(Value)用法和技巧在Python中,字典是一种非常常用的数据类型。它是由若干个键值对组成的无序集合。字典中每个键都唯一对应一个值,这个值可以是任意的Python对象,如数字、字符串、列表、甚至是其他字典。字典的值(Value)作为字典中的数据元素之一,其操作和使用方法非常重要。

    2024-04-08
    70
  • MySQL 字符串截取_sql截取某个字段某个字符后面的

    MySQL 字符串截取_sql截取某个字段某个字符后面的使用SUBSTRING_INDEX()函数 substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:分隔符计数 例子 取出上述表中数…

    2023-02-10
    146
  • Create Physical Standby using RMAN Backup with Duplicate Command[通俗易懂]

    Create Physical Standby using RMAN Backup with Duplicate Command[通俗易懂]Create Physical Standby using RMAN Backup with Duplicate Command How to Create Physical Standby Dat…

    2023-03-27
    141
  • Python函数调用的使用方法

    Python函数调用的使用方法Python是一种高级编程语言,它让程序员可以更快地编写代码,并通过函数调用来实现代码的复用。函数是Python中一组语句的集合,可以接受参数,并且可以返回一个结果。在本文中,我们将介绍如何使用Python函数调用。

    2024-07-12
    44
  • 20200616学习笔记

    20200616学习笔记count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效…

    2023-03-12
    188

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注