MySQL
文章平均质量分 81
Saintyyu
这个作者很懒,什么都没留下…
展开
-
dbunit实现原理及最佳实践
在使用dbunit写单元测试时,强烈建议先熟悉其底层的实现原理,否则可能导致测试数据库中的数据被清空的风险(尽管测试数据不如线上数据重要,但如果大量的测试数据被清空,导致测试环境不可用,数据恢复起来还是很头疼的!!)。参考博客1简单介绍了dbunit的实现原理:第一步:事先把数据表里的数据以XML的格式导出来;第二步:运行每一个测试之前先把当前数据表里的数据清空;第三步:把XML里的数据再导进数据表;第四步:数据表回到了单测前的状态。由此可见,在单测的第二步中,会将数据表里的数据清空。如果你原创 2020-10-13 17:13:50 · 2216 阅读 · 0 评论 -
Mysql学习之order by的工作原理
在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。查询语句为:select city,name,age from t where city='杭州' order by name limit 1000 ;全字段排序为避免全表扫描,我们需要在 city 字段加上索引。通常情况下,这个语句执行流程如下所示 : 初始化 sort_buffer,确定放入 name、city、转载 2020-09-26 11:59:16 · 371 阅读 · 0 评论 -
数据库分库分表平滑扩容方案
背景参考博客1给出了一种所谓的平滑帅气的秒级扩容的架构方案,但个人却认为,这个看似没有什么问题的方案在实际中几乎没什么用处,业界也几乎不会用这种方案来进行扩容(分库分表)。为了便于说明这一点,本文先简单回顾下该方案,然后分析该方案为什么没有用,最后给出两种业界广泛使用的分库分表的平滑扩容方案。双主扩容方案回顾如图所示,假设当前用户库user分布在两个实例上,ip0和ip1,服务层通过用户标识uid取模的方式进行寻库路由,模2余0的访问ip0上的user库,模2余1的访问ip1上的user库。原创 2020-09-26 00:11:35 · 2025 阅读 · 0 评论 -
什么?一对多场景下的exists子查询比join连表查询快这么多?
两张表连表查询可以使用join、exists和in等方式,其中exists和in都属于依赖子查询。参考博客1给出了三种方式使用场景。本文记录一次将join查询转换成exists查询后,性能得到了20倍以上的提升。现有收货单(delivery_order)和收货明细(delivery_sku)两张表。很明显,一个收货单对应多个收货明细。现在有一个需求是根据商品名称或skuId模糊匹配查询包含该sku的收货单列表。通常基于join方式的查询语句为:select dOrder.* fro原创 2020-09-09 23:42:33 · 1756 阅读 · 0 评论 -
MySQL数据表之间字符集不同连表查询报错
ALTER table table_name COLLATE=utf8mb4_general_ci;ALTER TABLE table_name convert to CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;to be continue...原创 2020-09-02 18:52:31 · 1648 阅读 · 0 评论 -
MySQL生成毫秒级别的时间戳
REPLACE(unix_timestamp(current_timestamp(3)),'.','')执行如下指令:select current_timestamp(3);将得到如下结果:2020-08-08 12:09:42.192执行如下指令:select unix_timestamp(current_timestamp(3))将得到如下结果:1596859992.347执行如下指令:select REPLACE(unix_timestamp(curre.原创 2020-08-08 12:15:16 · 9229 阅读 · 1 评论 -
IGNORE,REPLACE,ON DUPLICATE KEY UPDATE在避免重复插入记录时存在的问题及最佳实践
参考博客:1、https://blog.csdn.net/jbboy/article/details/46828917MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)2、https://www.cnblogs.com/moss_tan_jun/p/6909565.html MySQL auto_increment的...原创 2020-02-15 17:26:55 · 2455 阅读 · 11 评论 -
MySQL索引原理——B树
1、MyISAM是MySQL 5.5之前版本默认的存储引擎,从5.5之后,InnoDB开始成为MySQL默认的存储引擎。MyISAM使用B-Tree实现主键索引、唯一索引和非主键索引。InnoDB中非主键索引使用的是B-Tree数据结构,而主键索引使用的是B+Tree。2、InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,...原创 2019-11-11 23:16:17 · 1784 阅读 · 0 评论 -
mysql查询数据表中记录行数及每行空间占用情况
use information_schema;select TABLE_ROWS, concat(round(sum(DATA_LENGTH/1024), 2),'KB') as totalSize, concat(round(sum(DATA_LENGTH/1024), 2),'KB')/TABLE_ROWS as recordSize from TABLES where table_sch...原创 2019-09-25 16:53:03 · 9883 阅读 · 3 评论 -
MySQL的事务实现原理介绍:undo log、redo log、checkpoint和LSN
本文详细介绍了MySQL 的undo log、redo log、checkpoint和LSN等概念及原理原创 2019-09-13 21:41:22 · 2010 阅读 · 1 评论 -
Mysql中的join、cross join、inner join是等效的,某些场景下left join被转成inner join可以有更好的性能提升
今天在Mysql官网(参考博客1)看到一段话:At the parser stage, queries with right outer join operations are converted to equivalent queries containing only left join operations. In the general case, the conversion is ...原创 2019-08-31 11:03:41 · 3743 阅读 · 2 评论 -
为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
InnoDB的一棵B+树可以存放多少行数据?答案:约2千万为什么是这么多?因为这是可以算出来的,要搞清楚这个问题,先从InnoDB索引数据结构、数据组织方式说起。计算机在存储数据的时候,有最小存储单元,这就好比现金的流通最小单位是一毛。在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)的最小单元是块,一个块的大小是4k,而对于...转载 2019-08-28 10:38:19 · 2881 阅读 · 2 评论 -
MySQL常用优化手段
一、EXPLAIN做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划。下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式 key_len列,索引长度 row...转载 2019-08-28 10:35:05 · 249 阅读 · 0 评论 -
MySQL中Explain的Extra字段值Using index和Using where;Using index和Using where以及Using index condition的区别
在用explain对select语句进行执行计划分析时,我们常常会其中的Extra字段中出现Using index或Using index;Using where或Using where或Using index condition,那么这四者有什么区别呢?哪个检索的性能更好呢? 其实顾名思义,Extra是补充说明的意思,也就是说,Extra中的值补充说明了MySQ...原创 2019-08-17 17:48:09 · 5152 阅读 · 1 评论 -
case when实现数据库批量更新
在数据表操作中,批量更新数据行记录中的部分字段是很常见的操作。以下示例为在Mybatis框架下使用case when语句实现数据行记录批量更新。 以下示例为批量更一个订单中多个商品的数量和颜色。商品对应的Java类:public class Sku { private Long id; private String orderNo; ...原创 2019-08-17 16:18:28 · 1762 阅读 · 1 评论 -
MySQL中InnoDB引擎的辅助索引扩展
不少的书或博客,在介绍InnoDB引擎索引原理的时候,都会给出如下类似的两幅图(比如参考博客2和3):由图可知,主键索引和辅助索引(二级索引)分别是一棵B-树和B+树。其中主键索引的非叶子节点只存储主键信息,只有叶子节点会存储完整的数据行记录。整个数据表就是按照主键索引的大小顺序存储的,因而主键索引又叫聚簇索引。而对于辅助索引,非叶子节点只存储辅助索引对应的索引字段,而叶子节点的data字...原创 2019-06-08 16:44:42 · 2640 阅读 · 2 评论 -
MySQL常见的七种锁详细介绍
一、死锁示例考虑下面一个MySQL死锁的示例:有如下一张表:CREATE TABLE `test` ( `id` int(20) NOT NULL, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8表中有如下数据:mysql> ...原创 2019-06-08 07:11:04 · 62596 阅读 · 34 评论