
MySQL
MySQL、Mybatis、MyBatisPlus
抓手
这个作者很懒,什么都没留下…
展开
-
MybatisPlus rewriteBatchedStatements=true 批量插入失效,依然是单条插入问题解决
默认情况下,MybatisPlus的批量插入saveBatch方法实际上是for循环单条插入。如果想要实现真实的批量插入,需要在spring.datasource.url配置中加。原创 2023-09-26 18:24:40 · 4698 阅读 · 0 评论 -
MySQL InnoDB 为什么使用B+树作为索引结构
使用B+树作为索引结构可以提高查询效率和覆盖度,减少回表操作,支持高效的范围查询。原创 2023-04-25 14:13:47 · 546 阅读 · 0 评论 -
MySQL索引合并Index Merge 一条SQL使用多个索引情况分析,以及索引合并失效情况
MySQL在5.0版本加入了索引合并优化(Index Merge),索引合并可以同时查询多个索引的范围扫描,并将其结果合并为一个。索引合并只可以合并来自单个表的索引扫描,而不支持跨多个表的扫描。合并可以生成其基础扫描的并集(unions)、交集(intersections)或交集的并集(unions-of-intersections)。原创 2023-04-23 14:47:16 · 3951 阅读 · 0 评论 -
MySQL 查询表中重复数据
SELECT user_mobile FROM `t_user` GROUP BY user_mobile HAVING COUNT( user_mobile ) > 1;原创 2023-03-06 10:09:40 · 1274 阅读 · 0 评论 -
MySQL查询表的所有字段名
MySQL查询表的所有字段名。SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名';原创 2023-02-21 11:23:40 · 496 阅读 · 0 评论 -
update inner join set、update set where如何使用一个表中的字段更新另一个表中字段,MySQL
update inner join set 和 update set from ,如何使用一个表中的字段更新另一个表中字段,MySQL和SqlServer不一样。原创 2023-02-09 11:17:35 · 1379 阅读 · 0 评论 -
MySQL热点行更新
首先限制打到MySQL的流量前端加验证码、移动图像、回答问题等,限制同一用户的点击频率。后端添加缓存,读写都采用缓存操作,每隔一定时间将结果更新到数据库,对前端请求限流和降级。将请求放入消息队列,顺序将更新请求发送到数据库执行。MySQL层面将热点数据拆分,分在不同的库不同的表中,分散热点数据。将update转为insert,在一次db交互中完成。MySQL参数调优,innodb_flush_log_at_trx_commit = 0,innodb_thread_concurrency = 2原创 2022-08-17 13:37:22 · 1306 阅读 · 0 评论 -
MySQL 用id分库使用name查询
对用户表最常见的分库方式是水平切分方式并按照id取模分库。查询时可以对id取模后能够直接定位db。对于name无法定位到库,查询时往往需要遍历所有库,当分库数量多起来,性能会显著降低。原创 2022-08-01 09:47:03 · 1196 阅读 · 0 评论 -
MySQL大量写入问题优化方案 MySQL参数调优
innodb_flush_log_at_trx_commit是数据库的事务提交设置参数,默认为1。设置为0时,数据写入是最快的,但有可能丢失上1秒的数据。0:log buffer每隔1s进行刷盘。当机器出现宕机时,最多丢失1s的事务1:事务提交后立即进行log buffer刷盘。2:MySQL先将log buffer写入到os buffer,然后每隔1s将os buffer中的数据刷新到磁盘。...原创 2022-07-21 16:47:52 · 2301 阅读 · 0 评论 -
MySQL主从同步延迟解决方案
如果业务只需要保证数据的最终一致性,系统不优化。如果业务需要保证数据的强一致性,强制读主,高可用主库,用缓存提高读性能。在cache里记录哪些记录发生过写请求,来路由读主还是读从。......原创 2022-07-21 15:01:49 · 628 阅读 · 0 评论 -
MySQL7种JOIN(图)
MySQL7种JOIN原创 2022-07-21 14:21:28 · 245 阅读 · 0 评论 -
分布式事务解决方案
参与者:事务的执行者,例如每个数据库就是一个事务参与者。协调者:事务的发起者,访问多个数据库的服务程序,例如 购物服务 shopping-service 就是事务协调者。原创 2022-07-21 14:17:33 · 503 阅读 · 0 评论 -
MySQL 正则表达式
SELECT * FROM `t_user` WHERE user_name REGEXP ?原创 2022-07-15 10:57:21 · 149 阅读 · 0 评论 -
MyBatis-Plus对于大数据量查询,采用分页查询按批次处理结果,通用工具封装
定义业务处理接口/** * @author 向振华 * @date 2021/12/30 11:30 */public interface PageService<T> { /** * 业务处理 * * @param record */ void business(T record);}定义工具类,这里提供了两种实现方式import com.baomidou.mybatisplus.core.condition原创 2021-12-30 13:59:31 · 5255 阅读 · 5 评论 -
MyBatis-Plus条件构造器 多个组合OR嵌套拼接写法
// 参数final List<UserOrder> userOrders = getUserOrders();// 创建查询参数LambdaQueryWrapper<UserOrder> lqw = new LambdaQueryWrapper<>();lqw.eq(UserOrder::getChargeObjectType, "x");lqw.and(ilqw -> { userOrders.forEach(o -> { ilqw.o原创 2021-12-23 18:07:33 · 5758 阅读 · 2 评论 -
MySQL联合索引使用分析 彻底搞清楚什么情况下会走索引
1.建表CREATE TABLE `t_demo` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `a` varchar(15) DEFAULT NULL, `b` varchar(15) DEFAULT NULL, `c` varchar(15) DEFAULT NULL, `d` varchar(15) DEFAULT NULL, PRIMARY KEY (`id`), KEY `INDEX_A_B_C` (`a`,`b`,`c`原创 2021-05-19 14:42:47 · 10662 阅读 · 133 评论 -
MyISAM读什么 MyISAM读音 MyISAM的正确读法
MyISAM是MySQL的一种存储引擎,读音为[maiˈzæm]原创 2021-05-17 16:25:33 · 13012 阅读 · 6 评论 -
数据库跨库join方案
最好不要出现跨库join,应该在设计的时候就避免。将需要join的表放在同一数据库,即便是分库分表看能不能按相同维度分到一起。或者看能不能设冗余字段,避免关联查询。那如果无法避免跨库join,也应该走微服务API查询,或者使用中间件实现。一定要跨库join,MySQL也是可以支持的:1.开启FEDERATED引擎,修改my.ini(或my.cnf)文件新添加一行,内容为federated,然后重启MySQL。2.在数据库中建立远程表,通过参数CONNECTION='mysql..原创 2021-05-13 10:41:50 · 4178 阅读 · 5 评论 -
利用MybatisPlus两步实现多租户方案
1.定义一个TenantLineHandler的实现类:import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;import com.google.common.collect.Lists;import net.sf.jsqlparser.expression.Expression;import net.sf.jsqlparser.expression.LongValue;import java.原创 2021-04-26 15:30:33 · 4107 阅读 · 17 评论 -
MySQL一条update语句的执行过程(图)
update原创 2021-04-08 14:00:28 · 996 阅读 · 7 评论 -
MySQL InnoDB 缓冲池 buffer pool
什么是buffer poolMySQL服务器启动的时候会向操作系统申请了一片连续的内存作为缓冲池(buffer pool),默认128M,可以通innodb_buffer_pool_size过来调整它的大小。用于缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。buffer pool中存有控制块和缓存页一一对应,控制块包含:缓存页所属的表空间编号、页号、缓存页在buffer pool中的地址、链表节点信息、一些锁信息以及LSN信息;缓存页和磁盘上默认的原创 2021-03-29 15:15:26 · 591 阅读 · 1 评论 -
MySQL 日志 redo log、undo log、binlog、relay log、general log、slow query log、errorlog
MySQL中有以下7种类型日志文件:重做日志(redo log) 回滚日志(undo log) 二进制日志(binlog) 中继日志(relay log) 慢查询日志(slow query log) 一般查询日志(general log) 错误日志(errorlog)重做日志(redo log)回滚日志(undo log)二进制日志(binlog)中继日志(relay log)慢查询日志(slow query log)一般查询日志(general log)错误日志(errorl原创 2021-03-29 11:34:34 · 879 阅读 · 0 评论 -
MySQL 索引的所有叫法 索引有种类哪些 索引概念
在MySQL Innodb存储引擎中,索引就是数据,数据就是索引。索引类型B+树索引:Innodb引擎使用,且内部都是此索引类型。 Hash索引:基于哈希表实现,用于精确匹配索引所指向的数据。 全文索引:仅MyISAM引擎支持,主要用来查找文本中的关键字,而不是直接与索引中的值相比较。 自适应哈希索引:Innodb引擎使用,自动根据访问的频率建立的哈希索引。索引种类聚簇索引,也叫聚集索引、主键索引、一级索引。 非聚簇索引,也叫二级索引。聚簇索引一张表必须存在一个并且只存在一个,叶原创 2021-03-28 00:13:07 · 634 阅读 · 0 评论 -
MySQL InnoDB 锁概述
锁类型共享锁(S锁):也叫读锁,其他事务可以读,但不能写。 排他锁(X锁):也叫写锁,其他事务不能读取,也不能写。行级锁行锁:Record Locks,记录锁,锁单行记录。 间隙锁:Gap Locks,锁住行之间的间隙,不包括行本身,用于防止幻读。数据页中有两个最大最小值隐藏列,用于锁无限大范围的情况。 行间隙锁:Next-Key Locks,锁住两行记录之间的间隙,不包括行本身,是行锁+间隙锁的结合。 插入意向锁:Insert Intention Locks,插入记录时,如果插入位置被加原创 2021-03-27 00:01:46 · 465 阅读 · 6 评论 -
MySQL主从复制原理
MySQL主从复制步骤:主库记录数据修改的二进制日志(binary log) 从库将主库的二进制日志复制到自己的中继日志(relay log) 从库读取中继日志重放到从库数据中MySQL主从复制方式:异步:在主从复制的过程中,MySQL默认是异步复制的。主库写入binlog就直接返回给客户端了。从库再异步读取binlog重放到数据中。主库不关心从库的数据有没有写入成功。 全同步:主库必须等待全部从库的事务执行完毕才返回给客户端。 半同步:主库等待至少一个从库接收到binlog并写.原创 2021-03-26 10:57:22 · 387 阅读 · 0 评论 -
MySQL InnoDB MVCC原理
什么是MVCCMVCC(Mutil-Version Concurrency Control)多版本并发控制,指的就是在使用已提交读(READ COMMITTD)、可重复读(REPEATABLE READ)这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。这两个隔离级别的一个很大不同就是:生成ReadView的时机不同, 已提交读在每一次进行普通SELECT操作前都会生成一个ReadView,而可原创 2021-03-25 15:36:42 · 433 阅读 · 2 评论 -
MySQL explain简介
explain各字段说明id选择标识符(查询的顺序号)select_type:查询的类型table:输出结果集的表partitions:匹配的分区type:访问类型(性能:ALL < index < range < ref < eq_ref < const < system < NULL)possible_keys:可能使用的索引key:实际使用的索引key_len:索引中使用的字节数ref:索引的哪一列被使用了rows:扫描原创 2021-03-08 11:53:08 · 598 阅读 · 2 评论 -
MySQL EXPLAIN Extra Information 常见的执行计划额外信息说明
EXPLAIN输出的Extra列包含有关MySQL如何解析查询的其他信息。Using filesort当Query中包含ORDER BY操作,并且无法利用索引完成排序操作的时候,MySQL Query Optimizer就会选择相应的排序算法来实现。数据较少时从内存排序,否则从磁盘排序。Using index仅使用索引树中的信息从表中检索列信息(覆盖索引),而不必进行其他查找以读取实际行(不需要回表)。 当查询仅使用属于单个索引的列时,可以使用此策略。对于具有用户定义的聚簇索引的Inn.原创 2021-02-19 13:46:58 · 496 阅读 · 0 评论 -
Mybatis的xml查询sql拼接
字符串模糊查询 <if test="userName != null and userName!= ''"> AND `user_name` LIKE CONCAT(CONCAT('%', #{userName}), '%') </if>日期时间范围查询 <if test="dto.metaCreatedStart != null"> AND `meta_cre..原创 2021-02-18 14:18:35 · 1090 阅读 · 0 评论 -
MySQL批量插入100万数据sql语句拼接
public class Test { //CREATE TABLE `t_demo` ( // `id` bigint(20) NOT NULL AUTO_INCREMENT, // `a` char(5) DEFAULT NULL, // `b` char(10) DEFAULT NULL, // PRIMARY KEY (`id`) //) ENGINE=InnoDB AUTO_INCREMENT=1000005 DEFAULT CHARSE.原创 2021-01-04 11:20:38 · 1025 阅读 · 0 评论 -
MybatisPlus代码生成器
pom依赖 <!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>原创 2021-01-01 22:11:11 · 192 阅读 · 0 评论 -
MySQL查询数据库所有表名和描述
SELECT TABLE_NAME 表名, TABLE_COMMENT 描述 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = '数据库名' ORDER BY TABLE_NAME ASC也可以直接在information_schema库的TABLES表里面查看原创 2020-11-26 10:56:35 · 3673 阅读 · 0 评论 -
MySQL 关键字列表
ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONNECTION CONSTRAINT CONTI转载 2020-10-28 14:28:07 · 312 阅读 · 0 评论 -
MySQL COUNT(*) 和COUNT(1)的区别
通过MySQL5.7官方文档https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html可知InnoDBhandlesSELECT COUNT(*)andSELECT COUNT(1)operations in the same way. There is no performance difference.For MyISAM tables, COUNT(*) is optimized to return very q...原创 2020-12-26 22:13:27 · 544 阅读 · 5 评论 -
MySQL 行格式(Row Format)
行格式简介表的行格式决定了其行的物理存储方式,进而会影响查询和DML操作的性能。InnoDB存储引擎支持四种行格式:REDUNDANT、COMPACT、DYNAMIC、COMPRESSED。MySQL版本5.7默认使用DYNAMIC行格式。InnoDB行格式概述 行格式 紧凑的存储 特性 增强的可变长度色谱柱存储 大索引键前缀支持 压缩支持 支持的表空间类型 所需文件格式 REDUNDANT No No No No .原创 2020-10-10 14:38:17 · 2752 阅读 · 0 评论 -
MySQL redo log 刷盘时机
1.log buffer空间不足时2.事务提交时3.后台线程大约每秒刷新redo log到磁盘4.正常关闭服务器时5.checkpoint时原创 2020-09-30 15:12:57 · 2121 阅读 · 0 评论 -
MySQL 优化器处理的优化类型
重新定义关联表的顺序数据表的关联并不总是按照在查询中定义的顺序执行。将外连接转化为内连接并不是所有的OUTERJOIN语句都必须以外连接的方式执行。诸多因素,例如WHERE条件、库表结构都可能会让外连接等价于一个内连接。MySQL能够识别这点并重写查询,让其可以调整关联顺序。使用等价变化规则MySQL可以使用一些等价变换来简化并规范表达式。它可以合并和减少一些比较,还可以移除一些恒成立和一些恒不成立的判断。例如,(5=5 AND a>5)将被改写为a>5。类似的,如果有(a.原创 2020-09-23 16:04:48 · 1110 阅读 · 0 评论 -
MySQL 查询时不走缓存 SQL_NO_CACHE
SELECT SQL_NO_CACHE * FROM t_user WHERE id = 1;原创 2020-09-22 09:44:38 · 2562 阅读 · 2 评论 -
MySQL 死锁形成的原因和处理方法
死锁形成的原因死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务试图以不同的顺序锁定资源时,就可能会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。处理方法为了解决这种问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,比如InnoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁会导致出现非常慢的查询。还有一种解决方式,就是当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式通.原创 2020-09-21 11:20:59 · 2444 阅读 · 0 评论 -
mybatisplus设置空值更新
@TableField(updateStrategy = FieldStrategy.IGNORED) private Date expireTime;原创 2020-05-16 09:36:21 · 3737 阅读 · 0 评论