- 博客(60)
- 收藏
- 关注
原创 MySQL 执行原理
需要注意的是,这个ON子句是专门为外连接驱动表中的记录在被驱动表找不到匹配记录时应不应该把该记录加入结果集这个场景下提出的,所以如果把ON子句放到内连接中,MySQL会把它和WHERE子句一样对待,也就是说:内连接中的WHERE子句和ON子句是等价的。在内存中每一条记录会和驱动表结果集做一条记录匹配,之后从内存清除掉,然后在从驱动表结果集拿下一条记录,再把被驱动表记录加载到内存中,周而复始,驱动表结果集有多少条记录,被驱动表从磁盘加载到内存中就有多少次。主键索引是有序的,按照有序的主键去回表取记录。
2024-08-29 17:59:37 1016
原创 MySQL 系统库
每个表维护了一个变量,该变量记录着对该表进行crud的记录条数,如果发生变动的记录超过表大小的10%,并且自动重新计算统计数据功能打开,那么服务器会重新进行一次统计数据的计算,并更新。可按照监视不同维度进行分组,例如:按照不同数据库对象进行分组,按照不同的事件类型进行分组,或按照事件类型分组之后,在进一步按照账号,主机,程序,线程,用户等进行细分。主要存储了MySQL的用户账户和权限信息,还有一些存储过程,事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。通过创建和修改表时指定。
2024-08-29 17:55:53 1578
原创 MySQL 体系架构
除非有非常特别的原因需要使用其他存储引擎,否则应该优先考虑InnoDB存储引擎,InnodB引擎是一个非常好的值得花最多的时间去深入学习的对象,收益肯定比时间平均花在每个存储引擎的学习上要高得多。它不支持BLOB或TEXT类型的列,并且每行的长度是固定的,所以即使指定了VARCHAR 列,实际存储时也会转换成CHAR,这可能导致部分内存的浪费。在MySQL5.6.6以及之后的版本,InnoDB并不会默认把各个表的数据存储到系统表空间,而是为每个表建立独立表空间,可以理解为创建多少个表,有多少个独立表空间。
2024-08-08 21:20:09 1223 1
原创 MySQL 8.0新特性
MySQL 5.7以及早起版本,InnoDB自增列计数器(auto_increment)的值只存储在内存中。将权限授予哪个用户。函数索引在MySQL中相当于新增了一个列,这个列会根据指定的函数进行计算结果,然后使用函数索引时,用这个新增的计算列作为索引。MySQL 允许所有用户看到系统数据库的名称和某些表的内容,以便他们能够查询关于自己数据库对象的元数据。MySQL8.0.13开始支持在索引使用函数(表达式)的值。MySQL8.0开始支持原子DDL操作,其中与表相关的原子DDL只支持InnoDB存储引擎。
2024-08-08 21:10:03 1084
原创 MySQL 锁
即使在搜索条件使用了索引字段,但是否使用索引来检索数据是有MySQL通过判断不同执行计划的代价来决定,如果MySQL认为全表扫描效率高,比如对一些小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁。当一个事务获取了一条记录的S型记录锁后,其他事务也可继续获取该记录的S型记录锁,但获取不了该记录的X型记录锁。当我们对使用InnoDB存储引擎的表哦的某些记录加S锁之前,那就需要现在表级别加一个IS锁,当我么你对使用InnoDB存储引擎的表某些记录加X锁之前,那就需要现在表级别加一个IX锁。
2024-08-05 13:18:48 888
原创 MySQL 事务
事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可进行分隔),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务),要么全成功,否则都失败。事务的特性里包含一个隔离性,理论来说某个事务对数据访问时,其他事务应该排队,当该事务提交后,其他事务才可访问。开启一个事务后,执行了很多语句,发现其中语句是有问题,这时只能通过rollback进行回滚,让数据恢复到事务执行之前的状态,但有些业务,不需要全部回滚。下一个事务执行完后,后续事务将恢复到之前的隔离级别。
2024-08-05 13:08:39 1111
原创 MySQL 性能调优
优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询到,查询服务器优化器是如何进行优化到,便于用户重构查询和修改相关配置,达到最优。前面的章节我们知道如何设计最优数据库的表结构,如何建立最好的索引,这些对于高性能来说是必不可少的。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。需要确认业务表结构设计是否合理,SQL语句优化是否足够,索引设计是否规范,是否可以剔除无用的索引。慢查询日志,顾名思义,就是查询花费大量时间的日志。
2024-07-29 20:57:36 855
原创 MySQL 执行计划详解
派生表是在一个查询中定义的一个临时表,它由一个子查询生成,但不是作为查询的一部分返回,而是作为外部查询的一部分来引用。SUBQUERY:select、where之后包含了子查询,在select语句中出现的子查询语句,结果不依赖于外部查询(不在from语句中)。有了慢查询后,需要对慢查询语句进行分析。如果查询优化器决定使用全表扫描方式对某个表执行查询时,执行计划的row列的代表的预计需要扫描的行数。操作符连接的查询中,至少有一个查询依赖于外部查询的某个值时,这样的查询被称为。
2024-07-29 20:35:27 1561
原创 Java 代码 格式化插件
spring-javaformat-maven-plugin一组可应用于任何 Java 项目以提供一致的“Spring”风格的插件。该套件目前包括:由于该项目的目标是提供一致性,因此每个插件通常不可配置。您需要更改代码以匹配所需的约定。您无法配置插件约定来匹配您的风格!源格式化程序不会从根本上改变您的代码。例如,它不会改变 import 语句的顺序。它实际上仅限于添加或删除空格和换行符。2.2 使用默认情况下,格式化程序需要 Java 11。如果您正在处理较旧的项目,则可以使用基于 Eclipse 20
2023-11-21 20:31:44 525
原创 mysql 指定库对所有表加tenant_id
但库里表至少几百个,不可能一个一个去加,时间成本,人力成本都很大,所以写一个存储过程函数,对其进行一次性操作。由于业务所需,区分公司主体,tenant_id油然而生。⭐️生成好该函数后,执行该函数,即可。
2023-10-20 18:27:47 613
原创 idea连接远程服务器&上传war包文件
点击Mappings,配置Local path 和 Deployment Path。Deployment Path: 上传到服务器指定的文件夹的目录路径。Local Path: 上传war包的文件夹目录路径。点击右侧标签,点击"…
2023-07-26 17:46:18 1270
原创 Mysql 实现批量插入对已存在数据忽略或更新
唯一索引可为多个字段的联合索引,比如根据我提供的sql中,我需要``name。这里我们先制造2条数据,来判断我们批量插入是否能对已存在的数据进行忽略。age`不重复,则可把这2个字段联合创建为唯一索引。我们开始批量插入,对已存在数据进行忽略。笔者这里只举例第一种情况的demo。对已存在数据更新情况,读者自行练习。新增索引后,我们开始批量插入数据。批量插入对已存在数据忽略。批量插入对已存在数据更新。,需要唯一索引/主键。
2023-07-11 18:30:34 2252 2
原创 C语言 sizeof, size_t, strlen
默认赋值16,而char *arr相当于初始化机器的位数,如机器是64bit,则初始化8byte。由于存放当前地址值不知当前机器平台的位数,并保证代码具有可移植性,定义一个关键字。从这里我们可以看出定义char arr[]和char *p,输出的结果不同。char arr[],初始化为0字节,需要到时在堆内存赋值长度,拿一个。可变数组,在编译期生成,没有编译期不生成,必须动态分配。strlen() 算的是加到\0之前的大小,函数。sizeof() 算的是总空间大小,运算符。编译c文件,查看结果。
2023-04-26 20:01:30 1177 1
原创 C语言指针及数组的运行原理
编写一个数组定义的C文件demo.creturn 1;编译C文件生成汇编// -S 只进行编译// -fno-asynchronous-unwind-tables 过滤调试代码 [ root@localhost practice ] # gcc -S -fno-asynchronous-unwind-tables pointer.c查看生成的汇编文件demo.s.textmain:pushq %rbpmovl $11, -12(%rbp) // 将11存储到rbp-12的空间里。
2023-04-19 14:40:49 815
原创 指令段间及文件间参数调用过程(64位 Intel架构)
而当指令段间调用参数,先需要一个指令段调用另一个指令段,换句话说,需要该指令段中的一个汇编指令调用另一个指令段名称,这里通过call指令调用(相关作用可看最后指令补充)如下图所示。若文件间调用,则需要其中一个文件调用另一个文件参数,这里就需要用到c语言中的关键字extern来指定所需调用的参数。从下方代码可看出,main数中,将3个数据存放在寄存器中,sum通过寄存器取值并赋予在新开辟的栈空间中。在汇编中,当一个指令段B调用指令段A的数据,是如何实现的呢?编写一段2个指令段之间数据调用的C代码。
2023-04-18 23:27:14 582
原创 C语言的Hello World的汇编剖析(64位 Intel架构)
第二种方式的操作非常耗时,但也不是抛弃这个方式,由于寄存器数量有限(和计算机的位数相关,如你的计算机是32位,则有32个寄存器),当通用寄存器耗尽时,就可采用此方式。 若将C文件转换为汇编文件,则需要编译器作为桥梁,这里使用gcc编译器,由于为只需编译成汇编文件,所以采用—S这个选项命令即可。Gcc编译器(若采用Linux虚拟机剖析,则自带无需下载)OS正在运行自身程序,突然来了C语言一段代码,调用它。下图截至intel手册Volume 3 6.4节。指令段之间的调用,若有参数传递时,则会有2种方式。
2023-04-18 15:53:42 537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人