
MySQL
文章平均质量分 92
yakax
这个作者很懒,什么都没留下…
展开
-
MySQL-一些问题
优化器未使用你想用的索引select * from t force index(a) where a between 10000 and 20000;// 利用参数force index前缀索引直接创建完整索引,这样可能比较占用空间;创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;count区别MyISAM索引结构的优势count快就不说了而Innodb由于MVCC与可重复读的原因速度会相对慢点count(*)、count(主键id)和count(1) 都表示返回原创 2021-01-22 09:53:35 · 116 阅读 · 0 评论 -
MySQL-索引基本学习
InnoDB索引结构每个页里面有最大和最小记录标识record_type=2,3record_type=1是目录项 0是最终存储记录项一个页16kb=16384字节 可以存很多记录了基本3层就已经很多条记录了每个节点的左儿子小于父节点,父节点又小于右儿子索引每个节点的数据是已经排序好了的,当然如果你是联合索引,那也是排序好了的。索引的代价空间问题每建立一个索引都要为它建立一棵B+树,每一棵B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,一棵很大的B+树由许多数据页原创 2021-01-22 09:53:44 · 146 阅读 · 0 评论 -
MySQL-锁-间隙锁案例篇
间隙加锁规则原则1:加锁的基本单位是next-key lock。希望你还记得,next-key lock是前开后闭区间。原则2:查找过程中访问到的对象才会加锁。优化1:索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁。优化2:索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁。一个bug:唯一索引上的范围查询会访问到不满足条件的第一个值为止。注意!有行才会加行锁。如果查询条件没有命中行,那就加next-key l原创 2021-01-21 12:59:59 · 976 阅读 · 0 评论 -
MySQL-锁的学习
间隙锁临键锁行锁原创 2021-01-21 12:59:19 · 124 阅读 · 0 评论 -
MySQL-索引-索引合并学习
MySQL在一般情况下执行一个查询时最多只会用到单个二级索引,但是,在这些特殊情况下也可能在一个查询中使用到多个二级索引,设计MySQL的把这种使用到多个索引来完成一次查询的执行方法称之为:index merge所有的索引合并往往还是需要看数据回表的数量与 mysql 的优化器!优化器只有在单独根据搜索条件从某个二级索引中获取的记录数比较少,通过Union索引合并后进行访问的代价比全表扫描更小时才会使用Union索引合并Intersection合并Intersection翻译过来的意思是交集。这.原创 2021-01-21 12:58:10 · 200 阅读 · 0 评论 -
MySQL-事务学习
MVCCmysql事务隔离级别ReadViewpurge原创 2021-01-21 12:57:13 · 129 阅读 · 0 评论 -
MySQL-日志学习
1. 更新数据前 会把数据写入uodo 日志文件2. 更新数据后 会把数据写入redo缓冲池,这意味着这个缓冲池落地磁盘,跟事务有关系,可以通过`innodb_flush_log_at_trx_commit `配置。3. 当参数是1时,就是必须把redo log写入磁盘才能提交事务。0 的时候就是不会有redo日志、2 的时候是先写oscache 这两种都有丢失数据的风险4. buffer pool就是我们一直在操作的数据的缓冲区。5. redo log 文件里面也是一块一块追加在一起的原创 2021-01-21 11:38:53 · 172 阅读 · 0 评论 -
MySQL-连接查询学习
连接查询的基本语法INNER JOIN ## 内连接和外连接的根本区别就是在驱动表中的记录不符合ON子句中的连接条件时不会把该记录加入到最后的结果集LEFT JOIN ## 右边未匹配的null展示RIGHT JOIN ## 左边未匹配的null展示连接的原理需要知道的知识对于两表连接来说,驱动表只会被访问一遍,但被驱动表却要被访问到好多遍,来匹配记录。如果我们自己用代码来做连接查询,用不到索引走数去查询被驱动表,性能肯定完全没有mysql那么好在决定哪个表做驱动表的时候,应该是原创 2021-01-21 11:37:45 · 118 阅读 · 1 评论 -
MySQL-成本与统计数据学习
MySQL执行一个查询可以有不同的执行方案,它会选择其中成本最低,或者说代价最低的那种方案去真正的执行查询基于成本的优化步骤根据搜索条件,找出所有可能使用的索引计算全表扫描的代价计算使用不同索引执行查询的代价对比各种执行方案的代价,找出成本最低的那一个CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(10.原创 2021-01-21 11:36:40 · 364 阅读 · 2 评论 -
MySQL-查询-SQL简化与子查询的物化
条件化简## 移除不必要的括号((a = 5 AND b = c) OR ((a > c) AND (c < 5))) 改 (a = 5 and b = c) OR (a > c AND c < 5)## 常量传递(constant_propagation)a = 5 AND b > a 改 a = 5 AND b > 5## 移除没用的条件(trivial_condition_removal)(a < 1 and b = b) OR (a = 6 O原创 2021-01-21 11:35:39 · 904 阅读 · 0 评论 -
MySQL-Explain学习
explain详解select_type原创 2021-01-21 11:34:11 · 145 阅读 · 0 评论 -
MySQL-Buffer Pool 学习
一条sql执行基本流程在老版本的MySQL中sql通过连接进来时会有查询缓存这一块的逻辑。查询解析器解析sql 是否正确后,然后基本优化sql,生成执行计划,选择引擎执行。而InnoDB 在执行时 为了保证对数据的执行更快,省去磁盘IO开销 引入了Buffer PoolBuffer Pool当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中,从某种意义上来说buffer pool 完全可以替代了查原创 2021-01-21 11:31:43 · 251 阅读 · 2 评论 -
MySQL性能调优(7)复习补充
复习时自己产生的问题log缓冲池 Buffer Pool首先,InnnoDB 的数据都是放在磁盘上的,InnoDB 操作数据有一个最小的逻辑单位,叫做页(索引页和数据页)。我们对于数据的操作,不是每次都直接操作磁盘,因为磁盘的速度太慢了。InnoDB 使用了一种缓冲池的技术,也就是把磁盘读到的页放到一 块内存区域里面。这个内存区域就叫 Buffer Pool,下一次读取相同的页,先判断是...原创 2020-02-19 21:16:11 · 313 阅读 · 0 评论 -
MySQL性能调优(6)解读58同城数据库设计军规30条
军规适用场景:并发量大、数据量大的互联网业务只是解读:没必要完全效仿基础规范必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高必须使用UTF8字符集不过现在基本上用 UTF8MB4**解读:万国码,无需转码,无乱码风险,节省空间 UTF8MB4支持图像兼容4字节 **数据表、数据字段必须加入中文注释解读:N年后谁tm知道...原创 2020-02-19 21:14:54 · 287 阅读 · 0 评论 -
MySQL性能调优(5)Innodb引擎的MVCC
MVCCMultiversion concurrency control (多版本并发控制)并发访问(读或写)数据库时,对正在事务内处理的数据做多版本的管理。以达到用来避免写操作的堵塞,从而引发读操作的并发问题。这里看一个案例begin// 这里默认是加上X锁的,在未做commit/rollback操作之前update users set lastUpdate=now() where ...原创 2020-02-19 21:13:58 · 145 阅读 · 0 评论 -
MySQL性能调优(4)Innodb存储引擎的事务
事务数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元);MySQL中如何开启事务:begin / start transaction -- 手工commit / rollback -- 事务提交或回滚set session autocommit = on/off; -- 设定事务是否自动开启JDBC编程开启事务conne...原创 2020-02-19 21:09:24 · 202 阅读 · 0 评论 -
MySQL性能调优(3)查询优化详解
查询执行路径##### MySQL 客户端/服务端通信- MySQL客户端与服务端的通信方式是“半双工”;- 客户端一旦开始发送消息,另一端要接收完整个消息才能响应。客户端一旦开始接收数据没法停下来发送指令。- 对于一个MySQL连接,或者说一个线程,时刻都有一个状态来标识这个连接正在做什么- 查看命令 show full processlist / show processlist...原创 2020-02-19 21:08:27 · 206 阅读 · 0 评论 -
MySQL性能调优(2)存储引擎介绍、体系结构及运行机理
存储引擎介绍插拔式的插件方式(存储引擎本身是数据库服务器的组件,负责对在物理服务器层面上维护的基本数据进行实际操作)存储引擎是指定在表之上的,即一个库中的每一个表都可以指定专用的存储引擎最新的MySQL 8.0 发布之后,对数据库数据字典方面做了较大的改进。首先是,将所有原先存放于数据字典文件中的信息,全部存放到数据库系统表中,即将之前版本的.frm,.opt,.par,.TRN,....原创 2020-02-19 21:07:13 · 157 阅读 · 0 评论 -
MySQL性能调优(1)理解底层B+tree机制
索引是谁实现的索引是存储引擎实现的:本文章主要对MySQL常用的MyISAM与InnoDB这两个存储引擎做分析。索引是什么索引是为了加速对表中的数据行的检索而创建的一种分散存储的数据结构。为什么要用索引索引能极大的减少存储引擎需要扫描的数据量。(比如全表扫描就是在找数据)索引可以把随机IO变成顺序IO。(因为索引是有序的这样就能保证找数据的时候稳定性,在程序中不允许有不稳...原创 2020-02-19 21:04:35 · 266 阅读 · 0 评论