MySQL数据库
文章平均质量分 80
分享学习MySQL数据库
林林林ZEYU
坚持
展开
-
919-MySQL中char与varchar的类型区别
文档中有提到:CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。char和varchar类型声明长度表示用户想保存的最大字符数,其中char(M)定义的列的长度为固定的,M的取值可以0-255之间,当保存char值时,在它们的右边填充空格以达到指定的长度。当检索到char值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。char存储定长数据很方便,char字段上的索引效率很高。varchar原创 2021-12-25 10:13:58 · 185 阅读 · 0 评论 -
909-MySQL的MVCC机制下,可重复读级别不能完全解决虚读
MySQL使用MVCC(Multi-Version Concurrency Control,多版本并发控制)机制,默认隔离级别是RR(可重复读)。MySQL使用mvcc的RR级别,并不能解决幻读的问题。MVCC默认使用数据的创建时间和删除时间版本来管理数据,读的数据为快照,但操作是会在最新版本的数据上进行。存在以下几种情况:1、sessionA读,sessionB更新,sessionA读,无幻读 (默认使用A的版本快照)2、SessionA读,sessionB更新,sessionA更新,sessionA原创 2021-12-10 12:46:03 · 1082 阅读 · 0 评论 -
908-MySQL的 Insert Buffer
Buffer Pool 缓冲池回顾在讲插入缓冲这个振奋人心的 InnoDB 新特性之前,我们有必要先来回顾下 Buffer Pool(缓存池)的概念。前文说过,InnoDB 存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可将其视为基于磁盘的数据库系统(Disk-base Database)。为了缓解 CPU 与磁盘速度之间的矛盾,基于磁盘的数据库系统通常使用缓冲池技术来提高数据库的整体性能。缓冲池其实就是一块内存区域,没什么特别的。对于数据库中页的读取操作,首先会将从磁盘读到的页原创 2021-12-09 17:29:16 · 788 阅读 · 0 评论 -
896-怎么解决MySQL死锁问题的?
什么是死锁?死锁是并发系统中常见的问题,同样也会出现在数据库MySQL的并发读写请求场景中。当两个及以上的事务,双方都在等待对方释放已经持有的锁或因为加锁顺序不一致造成循环等待锁资源,就会出现“死锁”。常见的报错信息为 Deadlock found when trying to get lock…。举例来说 A 事务持有 X1 锁 ,申请 X2 锁,B事务持有 X2 锁,申请 X1 锁。A 和 B 事务持有锁并且申请对方持有的锁进入循环等待,就造成了死锁。如上图,是右侧的四辆汽车资源请求产生了回路现原创 2021-12-04 13:52:50 · 160 阅读 · 0 评论 -
885-MySQL的快慢查询
慢查询慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。SQL查询速度慢的原因1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多次查询原创 2021-11-29 22:46:11 · 291 阅读 · 0 评论 -
884-实际生产环境的 B+ 树索引有多少层?
在实际生产环境中,InnoDB 中一棵 B+ 树索引一般有多少层?可以存放多少行数据?一般是 2 ~ 3 层,可以存放约 两千万行 的数据。前文说过,页是 InnoDB 磁盘管理的最小单位,在 InnoDB 存储引擎中,默认每个页的大小为 16KB。而页里面存放的东西就是一行一行的记录。假设一行数据的大小是 1k,那么一页就可以存放 16 行这样的数据。众所周知,B+ 树的叶子节点存储真正的记录,而非叶子节点的存在是为了更快速的找到对应记录所在的叶子节点,所以可以简单理解为非叶子节点存放的是键值原创 2021-11-29 13:40:59 · 156 阅读 · 0 评论 -
865-图解MySQL的MVCC
前文我们介绍了 InnoDB 存储引擎在事务隔离级别 READ COMMITTED 和 REPEATABLE READ(默认)下会开启一致性非锁定读,简单回顾下:所谓一致性非锁定读就是每行记录可能存在多个历史版本,多版本之间串联起来形成了一条版本链,这样不同时刻启动的事务可以无锁地访问到不同版本的数据。undo log 版本链一致性非锁定读是通过 MVCC(Multi Version Concurrency Control,多版本并发控制) 来实现的。事实上,MVCC 没有一个统一的实现标准,所以各个存原创 2021-11-25 14:06:58 · 329 阅读 · 1 评论 -
864-MySQL的一致性非锁定读与一致性锁定读
今天咱们花三分钟了解下数据库中的两种读(select)操作:一致性非锁定读 和 一致性锁定读一致性非锁定读一致性非锁定读是什么?这里我先给出一个最最最简单的解释:一致性非锁定读就是读快照!快照即当前行数据之前的历史版本,每行记录可能存在多个历史版本,或者说每行记录可能有不止一个快照数据,一般我们将这种技术称为 行多版本技术。而由于一个行记录可能对应着多个快照(历史版本),为此不可避免地会带来一系列的并发问题,如何解决这些并发问题,就是所谓的 多版本并发控制(MVCC),当然,这不是本文的重点。在不同原创 2021-11-25 14:01:20 · 129 阅读 · 0 评论 -
861-SQL 查询语句是如何执行的
SQL 查询语句是如何执行的?2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头。为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其设计思想,因此,了解 MySQL 的逻辑架构是必要的。本文将通过一条 SQL 查询语句的具体执行过程来详细介绍 MySQL 架构中的各个组件。MySQL 逻辑架构概览MySQL 最重要、最与众不同的特性就是它的可插拔存储引擎架构(pluggable storage engin原创 2021-11-24 22:20:36 · 146 阅读 · 0 评论 -
838-MySQL容灾篇
容灾有几种方式?从冷热来说,分为冷备和热备。从距离来说,分为同城和异地。一般而言,大的维度划分就是两者的正交:同城冷备,异地冷备,同城热备,异地热备。MySQL如果挂了怎么办呢?MySQL可以主从模式部署,如果主挂了,可以将从升级为主。当然,为了节约资源,如果业务允许,在平时运行正常的时候,也可以将部分读请求分流到从节点。那主从模式按部署方式又分为哪几种?常见的主从模式有几种,具体的模式也得看实际的业务需要。根据实际的情况,选择合适的一种架构模式。1.一主一从模式:一个大佬带一个小弟,大佬挂原创 2021-11-19 10:21:08 · 2480 阅读 · 0 评论 -
739-关系型数据库和非关系型数据库对比介绍
什么是关系型数据库?1.关系型数据库简单的可以理解为二维数据库,表的格式就如Excel,有行有列。常用的关系数据库有Oracle,SqlServer,Informix,MySql,SyBase等。(也即是我们平时看到的数据库,都是关系型数据库)2.所谓关系型数据库,是指采用了关系模型来组织数据的数据库。关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出,在之后的几十年中,关系模型的概念得到了充分的发展并逐渐成为数据库架构的主流模型。简单来说,关系模型指的就是二维表格模型,而一个关系型数据原创 2021-10-31 00:07:43 · 449 阅读 · 0 评论 -
728-MySQL索引篇
1. 索引是什么?索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。而且索引是一个文件,它是要占据物理空间的。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。比如我们在查原创 2021-10-29 09:16:31 · 232 阅读 · 0 评论 -
711-MySQL基础篇
MySQL基础篇MySQL是什么?MySQL是一个传统的RDBM数据库,也就是关系型数据库,广泛应用于OLTP场景。你提到了OLTP,能说说它和OLAP的区别是什么吗?OLTP(联机事务处理)是传统的关系型数据库的主要应用,用于基本的、日常的事务处理,例如银行的交易记录;而OLAP(联机分析处理)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供了直观易懂的查询结果。最常见的应用就是复杂的动态报表系统。总体来说,OLTP用于日常处理、OLAP用于数据分析。你知道数据库的三范原创 2021-10-22 18:48:10 · 1153 阅读 · 0 评论 -
710-MySQL原理篇
MySQL原理篇MySQL的四种隔离级别SQL标准定义了4类隔离级别,包括一些具体规则,用来限定事务之间的隔离性。这四种级别分别是读未提交、读已提交、可重复读、串型化。读未提交,顾名思义,就是可以读到还没有提交的数据;读已提交会读到其它事务已经提交的数据;可重复读确保了同一事务中,读取同一条数据时,会看到同样的数据行;串型化通过强制事务排序,使其不可能相互冲突。重点介绍下Repeatable ReadRepeatable Read就是可重复读。它确保了在同一事务中,读取同一条数据时,会看到同样的原创 2021-10-22 14:30:27 · 233 阅读 · 0 评论 -
696-MySQL自增主键为何不是连续的呢?
MySQL自增主键为何不是连续的呢?众所周知,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,大量的随机IO。自增主键不连续。为何自增主键不是严格递增的?为了更加形象,这里创建一个表xl_tb,其中id是自增主键字段、a是唯一索引,然后插入一条数据,我们再查看它的表结构。CREATE TABLE `NewTable` (`id` int(11) NOT NULL AUTO_INCREMENT ,`a` int(11) NULL ,`b` int(11) NULL ,PR原创 2021-10-17 17:55:56 · 217 阅读 · 0 评论 -
675-MySQL的连接问题
以100每秒的速度向mysql写数据,持续5s,此时我们的程序和mysql建立了多少个tcp连接?从编程的角度来看,一个问题的解答过程,无非是寻求输入输出,这里输出是多少个tcp连接,那么就要锁定输入,也就是参数,有哪些因素会影响这个问题?mysql当前处理能力和连接池配置。参数分析1.mysql处理能力如果负载正常的情况,mysql 1s内一定能处理100个请求。如果负载比较高,那1s内就处理不完,为了方便讨论,这里假设1s能处理50个请求。PS: 正常实体机的mysql,即使配置差到1核1原创 2021-10-12 21:56:58 · 136 阅读 · 0 评论 -
467-MySQL(扩展配置)
设置字符编码有时候MySQL中的表需要存储中文,需要设置表的字符编码为utf8,否则默认的字符编码有可能不能正确处理中文,在MySQL中设置表的字符编码如下:通过命令查看MySQL表的字符编码,如下:如下设置:字符编码设置utf8成功,MySQL的status运行状态和运行参数都是通过全局变量来控制的,用show status和show variables两个命令可以查看这些信息,用set可以设置这些信息,改变配置。设置存储引擎如何查看当前MySQL版本都支持哪些存储引擎呢?如下命令:S原创 2021-08-23 20:15:34 · 167 阅读 · 0 评论 -
466-MySQL(查看源码的工具sourceinsight)
查看源码sourceinsight原创 2021-08-23 20:08:32 · 394 阅读 · 0 评论 -
465-MySQL(GUI工具)
GUI工具SQLyog(小海豚,免费,轻便)Navicat(功能多,有破解版,运行起来,占用资源多)Windows SQLyog远程linux我们要保证IP地址是通的。我们查看linux下的IP地址我们打开Windows的cmd来ping一下地址网络可通。在linux上查看防火墙公开了测试连接成功询问就是敲SQL语句...原创 2021-08-23 19:53:08 · 117 阅读 · 0 评论 -
464-MySQL(分库分表)
数据库架构演变刚开始多数项目用单机数据库就够了,随着服务器流量越来越大,面对的请求也越来越多,我们做了数据库读写分离, 使用多个从库副本(Slave)负责读,使用主库(Master)负责写,master和slave通过主从复制实现数据同步更新,保持数据一致。slave 从库可以水平扩展,所以更多的读请求不成问题。但是当用户量级上升,写请求越来越多,怎么保证数据库的负载足够?(主库的磁盘大小和磁盘I/O都受不了,把这个表分在多台数据库服务器里面进行写入)增加一个Master是不能解决问题的, 因为数据要原创 2021-08-23 19:37:22 · 174 阅读 · 0 评论 -
463-MySQL(mycat读写分离实践)
mycat读写分离配置条件:master(centos7):192.168.131.129slave(win10):192.168.31.271、JDK1.7版本以上(java -version检查jdk环境)2、MySQL的root账户有远程访问权限要打开root的远程连接注意:我们的IP是dhcp,动态分配的,是有过期时间的,要检查ip。安装与配置:1、安装MycatMycat-server-1.6-RELEASE-20161028204710-linux.tar.gz( rz工具原创 2021-08-23 13:03:31 · 388 阅读 · 0 评论 -
462-MySQL(读写分离原理)
读写分离基于主从复制的读写分离,是我们在单机环境下,数据库的性能到瓶颈了,我们进行读写分离,提高后台服务,存储这一块的增删改查的并发的处理能力。有一个库专门写操作,从库专门读取操作,主库的数据更改提供主从复制同步到从库。读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。我们把图中的客户端看作:代码 mysql client,通过mysql 提供的API,用mysql自定义的基于TCP的数据协议,简称m原创 2021-08-23 10:31:38 · 313 阅读 · 0 评论 -
461-MySQL(主从复制实践)
主从复制配置命令条件:master和slave机器的信息master(centos7):192.168.131.129slave(win10):192.168.0.6保证master和slave之间的网络互通,并且保证3306端口是开放的。master配置:1、开启二进制日志 配置log_bin和全局唯一的server-id。2、创建一个用于主从库通信用的账号用%表示任意的IP,为什么下面用的IP不是从库的机器的IP?因为我们的特殊环境造成的,linux是在Windows下装的虚拟机,虚拟原创 2021-08-23 09:53:48 · 165 阅读 · 0 评论 -
460-MySQL(主从复制原理)
MySQL集群在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。1、数据备份 - 热备份&容灾&高可用2、读写分离,支持更大的并发(有了主从复制,才可以实现读写分离)读写分离:我们读操作多,写操作少。主库专门写操作,数据的更新,通过binlog同步到从库,客户端的查询请求最终映射到从库上,从库读操作。1主2从。提原创 2021-08-22 21:44:43 · 177 阅读 · 0 评论 -
459-MySQL(一次SQL的完整处理流程)
一次SQL的完整处理流程mysql client和 mysql server进行通信的时候,当我们要进行一个请求的时候,作为mysql client,首先和服务器进行通信,里面有一个查询缓存,属于连接器的部分,控制连接的,走的是TCP 加密的ssl通信协议,客户端在登录的时候,要进行合法性的检查(验证mysql账号密码之类的是否正确,后续如果有SQL过来,如果是select的话优先访问查询缓存,连接器到后边,就是所谓的解析器,解析SQL,生成解析树,验证SQL是否合法。解析器完成以后就到优化器,根据解原创 2021-08-22 21:09:02 · 157 阅读 · 0 评论 -
458-MySQL(mysqldump数据备份)
mysqldump数据备份部署在后台服务器或者云端的MySQL大部分做了一些限制,在本地无法直连后台服务的数据库 3306端口上,一般有防火墙之类的网络中间件。没有条件用GUI图形化界面工具,鼠标进行数据备份,数据恢复。我们通过命令。命令也最快速。mysqldump -u root -p123456 --all-databases > ~/all.sqlmysqldump -u root -p123456 --databases school > ~/school.sqlmysqld原创 2021-08-22 20:54:36 · 106 阅读 · 0 评论 -
457-MySQL(日志)
在之前,我们已经讲了MySQL事务日志:redo log 和 undo log(是InnoDB engine存储引擎生成的)作为一个mysql client 来发起一个连接请求这章我们要讲的MySQL日志打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了。在linux root下重启mysqld服务:service mysqld restart...原创 2021-08-22 19:30:31 · 158 阅读 · 0 评论 -
456-MySQL(如何进行优化)
MySQL优化MySQL需要优化的地方有哪些???分为3个方面:1、SQL和索引的优化(数据量比较大,执行SQL效率低,要优化)开启慢查询日志-》设置相应的合理的慢查询时间–》记录慢查询SQL–》用explain分析SQL的执行计划–》相应的优化措施–》数据量太大的话,用分页。用索引。用多列索引。大小表设置。多表查询不用in,用外连接替代。2、应用优化1、连接数据库上,可以引入连接池(中间件)2、引入缓存(存储热点数据,redis,请求来了,先在redis上查一下,如果redis上直接查到就原创 2021-08-22 09:54:18 · 284 阅读 · 0 评论 -
455-MySQL(redo log重做日志)
当事务提交之后,不管MySQL server会出现什么不可预期的错误,哪怕是进程挂了,断电了,只要事务提交成功,由MySQL处理完异常后把数据恢复redo log 重做日志redo log:重做日志,用于记录事务操作的变化,确保事务的持久性。redo log是在事务开始后就开始记录,不管事务是否提交都会记录下来,在异常发生时(如数据持久化过程中掉电),InnoDB会使用redo log恢复到掉电前的时刻,保证数据的完整性。innodb_log_buffer_size默认是16M,就是redo log缓原创 2021-08-21 21:49:51 · 205 阅读 · 0 评论 -
454-MySQL(意向共享锁,意向排他锁和死锁)
InnoDB表级锁我们在之前知道,InnoDB是行锁,但是不是每次都获取行锁,如果没有索引项的话,还是一个表锁。而且有的时候,我们希望直接去使用表锁。在绝大部分情况下都应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别情况下也使用表级锁;1)事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,不仅这个事务执行效率低,而且可能造成其他事务长时间等待和锁冲突;2)事务涉及多个表,比较复杂,很可能引起死锁,造成大量事务回滚。如:LOCK TABLE user READ;读锁锁表原创 2021-08-21 21:03:01 · 179 阅读 · 0 评论 -
453-MySQL(MVCC和undo log)
事务的中间两级隔离级别2、TRANSACTION_READ_COMMITTED。已提交读。说明读取未提交的数据是不允许的。这个级别仍然允许不可重复读和虚读产生。3、TRANSACTION_REPEATABLE_READ。可重复读。说明事务保证能够再次读取相同的数据而不会失败,但虚读仍然会出现。备注:事务隔离级别越高,为避免冲突所花费的性能也就越多。在“可重复读”级别,实际上可以解决部分的虚读问题,但是不能防止update更新产生的虚读问题,要禁止虚读产生,还是需要设置串行化隔离级别。InnoD原创 2021-08-21 19:26:41 · 269 阅读 · 0 评论 -
452-MySQL(表锁,行锁,排他锁,共享锁,间隙锁)
事务隔离级别的实现原理锁+MVCC事务-》事务的ACID特性-》事务的隔离性-》事务要能够允许并发执行-》数据的安全性,一致性和并发的效率问题-》事务的隔离级别串行化-》锁实现,给所有的事务都排个序,并发的效率就低了,数据的安全性高。未提交读-》没有做任何的并发控制,明知是错误的,造成脏读,数据的安全性最低。优点是并发效率非常高。我们用的是下面这2个隔离级别:已提交读可重复读结合了数据的安全性,一致性,并发的效率 ,由MVCC多版本并发控制实现的。表级锁&行级锁表级锁:对整张表原创 2021-08-21 11:31:07 · 282 阅读 · 0 评论 -
451-MySQL(事务)
MySQL事务MyISAM不支持事务InnoDB支持事务,支持行锁事务概念一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库;如果有部分事务处理失败,那么事务就要回退到最初的状态,因此,事务要么全部执行成功,要么全部失败。有的业务需要1条以上的SQL语句共同完成,这些SQL都成功了才算业务成功。类似于银行的转账,商品的入库出库业务由2条SQL组成。 没有一部分成功一部分失败这一说。begin开启事务,原创 2021-08-20 21:37:16 · 248 阅读 · 0 评论 -
450-MySQL(索引常见问题,慢查询日志)
索引常见问题问题1InnoDB存储引擎。首先,最基本的,userid要加索引(因为一般用过滤条件加索引),此时创建的是二级索引树,select *还要涉及回表。而且还有order by addtime,如果addtime没有建索引的话,会出现using filesort(addtime的文件排序)!所以,我们要加联合索引(多列索引):userid+addtime有using filesort的差别,数据的外排序。用userid=123选择出来的数据越多,耗费的排序性能差的越大。例如原创 2021-08-20 19:40:41 · 227 阅读 · 0 评论 -
449-MySQL(哈希索引,InnoDB自适应哈希索引)
哈希索引(memory支持)memory:基于内存的存储引擎哈希表在可控的冲突范围,我们经常写的链式哈希表,它的增删改查的时间复杂度都是O(1)哈希索引,基于哈希表这个数据结构实现的链式哈希表:平衡树的增删改查的时间复杂度是O(logn)B+树索引就是把磁盘上的存储的索引加载到内存上构建的数据结构,索引就是数据结构。看起来哈希表比B+树好。但是为什么MyISAM和InnoDB存储引擎用的是B+树索引?我们主要看1、搜索的效率:2、磁盘I/O的花费:我们改用创建哈希索引来看看实际上原创 2021-08-20 13:21:58 · 329 阅读 · 0 评论 -
448-MySQL(MyISAM主索引树,二级索引树)
MyISAM存储引擎数据和索引没有放在一块。叫做 非聚集索引InnoDB:数据和索引存放在一块,叫聚集索引场景1uid是主键,有主键索引树。name创建二级索引树主键索引树如下每一个key底下的data放的都是数据的地址MyISAM引擎使用B+树作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM主键索引的原理图辅助索引树(二级索引树)如下主键索引树和二级索引树两者之间的联系两者除了:主键索引树上的uid不能重复,二级索引树的name可以重复。其他的存储方原创 2021-08-20 10:47:47 · 345 阅读 · 0 评论 -
447-MySQL(InnoDB的主键和二级索引树)
InnoDB存储引擎数据和索引存储在一起。一张表有2个文件:student.frm,student.ibd(数据和索引文件)场景1(主键索引树)uid是主键,其他字段没有添加任何索引select * from student;搜索的是整个索引树。主键索引树从叶子节点的链表上,从左到右遍历。select * from student where uid<5;MySQL看到有过滤条件,uid有索引,如果是做等值查询,相当于从根节点开始,按照二分搜索的方式找到5,就找到5对应的原创 2021-08-20 10:35:22 · 305 阅读 · 0 评论 -
446-MySQL(索引的底层实现原理,B树,B+树索引)
索引的底层实现原理数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越“矮胖”,磁盘IO次数就少MySQL支持两种索引,一种的B-树索引,一种是哈希索引大家知道,B-树和哈希表在数据查询时的效率是非常高的。这里我们主要讨论一下MySQL InnoDB存储引擎,基于B-树(但实际上MySQL采用的是B+树结构)的索引结构。B-树是一种m阶平衡树,叶子节点都在同一层,由于每一个节点存储的数据量比较大,索引整个B-树的层原创 2021-08-20 09:54:04 · 291 阅读 · 0 评论 -
445-MySQL(解析索引,索引的操作)
MySQL索引只要是关系型数据库,索引都是其查询最核心的关键当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此时就需要用索引来加速SQL查询。由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率,适得其反,因此掌握良好的索引创建原则非常重要!索引也是数据结构,要对索引列,存储引擎会对这列的值进行排序,当我们索引太多的话,我们对表增加或者减原创 2021-08-19 20:45:04 · 855 阅读 · 1 评论 -
444-MySQL(存储引擎)
MySQL存储引擎插件式的存储引擎,存储引擎可更换,支持不同类型的存储引擎我们创建的表有3个东西:表的结构,数据,表的索引怎么存储,存储方式是什么?这就是存储引擎直接影响上面内容的存储方式MyISAM 不支持事务、也不支持外键,索引采用非聚集索引,其优势是访问的速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。MyISAM的表在磁盘上存储成 3 个文件,其文件名都和表名相同,扩展名分别是:.frm(存储表定义).MYD(MYData,存原创 2021-08-19 18:17:10 · 154 阅读 · 0 评论