首页 > 数据库 >Mysql(数据库)知识详解【4】~{索引,主键优化}

Mysql(数据库)知识详解【4】~{索引,主键优化}

时间:2024-03-28 21:00:45浏览次数:41  
标签:index 主键 索引 详解 Mysql 查询 节点 指针

记住满元素中间元素向上裂变就行了

因为如果是5个节点,比第一个节点小的算一个指针,逼最后一个节点大的算一个指针,里面是4个指针

所有元素都会出现在叶子节点并且诸多叶子节点通过指针构造一张单项链表

看我:除了最下面节点,上面的节点(叶子空间最大16k)全部放满内存可以放1171个指针(存放指向其他节点的地址)和1170个键值,2级高度(相当于一个叶子节点下面可以有1171个叶子节点)就是1171

主键个数 * 主键字节数 + 指针数量 * 6个字节 = 16kb(每页占16kb,每区占1MB)

这个例子意思是:一页可以有1171个指针,一页可以有16行的1k数据

索引的作用

索引大大减小了服务器需要扫描的数据量,从而大大加快数据的检索速度,这也是创建索引的最主要的原因。

索引可以帮助服务器避免排序和创建临时表

索引可以将随机IO变成顺序IO

索引对于InnoDB(对索引支持行级锁)非常重要,因为它可以让查询锁更少的元组,提高了表访问并发性

关于InnoDB、索引和锁:InnoDB在二级索引上使用共享锁(读锁),但访问主键索引需要排他锁(写锁)

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

缺点

创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加

索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间,如果需要建立聚簇索引,那么需要占用的空间会更大

对表中的数据进行增、删、改的时候,索引也要动态的维护,这就降低了整数的维护速度 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

对于非常小的表,大部分情况下简单的全表扫描更高效;

最左前缀法则:第一个在MySQL语句当中where后面出现的第一个索引,即为最左索引,要两个以上即可建立成功(要先写联合索引,才能构建最左)

说明两个索引也可创建联合索引

如果profession不存在,则该联合索引整个失效

走不走索引完全是由最左字段是否存在决定的,而是否跳过中间某一列则决定了索引是否部分失效

联合索引的创建:create index idx_user_pro_age_sta on tb_user(profession,age,status);

要避免上述情况可以用>= 或者 <=

不要在索引列上进行运算操作,否则索引失效

字符串不加单引号,隐式类型转换,隐式类型转换导致索引失效

use index 和ignore index,MySQL不一定会生效,force index 才会

覆盖索引不需要回表查询

extra中出现using where ,using index性能高 , 出现 using index condition 性能低

原来二级索引存的是字段值本身+主键id。查询的字段不存在就要回表查询,先走二级索引找到对应主键,然后再走主键索引找对到对应行数据,回表查询:先进行二级索引查询再进行聚集查询,二级查到了,就不需要聚集索引

回表查询:先扫描二级索引,再扫描聚集索引的过程

顺序插入的性能高于乱序插入

然后变为下图

最后变成下图

标签:index,主键,索引,详解,Mysql,查询,节点,指针
From: https://blog.csdn.net/ChinachenCSDN/article/details/137123869

相关文章

  • [附源码]计算机毕业设计保险客户管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍在现代保险行业中,客户管理系统对于提升客户服务水平、增强客户满意度和构建长期客户关系至关重要。随着大数据和人工智能技术的发展,保险公司迫切需要一个先进的......
  • [附源码]计算机毕业设计技术文档管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍技术文档管理系统是企业信息化建设的重要组成部分,它关系到知识的积累、共享和管理效率。随着企业规模的扩大和业务的多样化,传统的文件管理方式已无法满足快速检......
  • docker 创建mysql:8
    最后修改时间2024-03-28docker查找mysql:8.0.20sudodockersearchmysql:8.0.20docker拉mysql:8.0.20sudodockerpullmysql:8.0.20创建mysql:8.0.20相关文件夹和文件mkdir/home/ubuntu/mysqlmkdir/home/ubuntu/mysql/logmkdir/home/ubuntu/mysql/datamkdir/home/ub......
  • java计算机毕业设计(附源码)学生日常行为评分系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在教育过程中,学生的行为举止不仅反映了个人素养,也是学校文化和教育质量的直接体现。传统的德育评价体系多依赖于教师的主观观察和判断,这种方式往往存在一......
  • java计算机毕业设计(附源码)学生社团管理系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着教育多元化的推进,学生社团作为校园文化的重要组成部分,在培养学生兴趣爱好、提升实践能力、促进人际交往等方面发挥着不可替代的作用。然而,伴随着社团......
  • Mysql数据库——主从复制与读写分离
    目录前言一、主从复制1.主从复制的定义2.Mysql主从复制支持的类型3.主从复制的过程4. 主从复制出现的问题5.解决方法二、读写分离1.读写分离的定义2.读写分离的作用3.读写分离作用场景3.1基于程序代码内部实现3.2基于中间代理层实现4.主从复制与读写分离三、搭......
  • 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较
    1.数据格式介绍数据格式是用于组织和存储数据的规范化结构,不同的数据格式适用于不同的场景。常见的数据格式包括JSON、YAML、XML、CSV等。数据可视化|一个覆盖广泛主题工具的高效在线平台(amd794.com)https://amd794.com/jsonformat2.JSON(JavaScriptObjectNotation)......
  • MySQL主从复制
    目录一、主从复制的原理二、搭建主从复制(一主一从)1、两台主机安装MySQL2、修改配置文件3、创建主从复制用户4、主从库重启并验证server_id5、配置从库与主库的复制关系6、验证主从复制一、主从复制的原理master服务器将数据的改变记录二进制日志,当master上的数据发生改变时,则将......
  • MySQL各类查询语句DQL——聚合函数
    插入数据insertintostudentvalues(0,'2024-02-2510:10:10','赵灵儿','123','15612345678',16,'女','逍遥哥哥,你终于找到我了。');insertintostudentvalues(0,'2024-02-2510:10:10','王语嫣','123&......
  • MySQL学习必备SQL_DDL_DML_DQL
     MySQL创建数据库需要自行创建,数据库名称可以为【schoolDB】,字符集【utf8】,排序规则【utf8_general_ci】,1.学生表DDLCREATETABLE`student`( `id`INT(11)NOTNULLAUTO_INCREMENTCOMMENT'学号', `createDate`datetimeDEFAULTNULL, `userName`VARCHAR(......