order by实现原理

概述在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t` ( `

解决数据库死锁的一些方式

解决死锁的最佳方式当然就是预防死锁的发生了,我们平时编程中,可以通过以下一些常规手段来预防死锁的发生:在编程中尽量按照固定的顺序来处理数据库记录,假设有两个更新操作,分别更新两条相同的记录,但更新顺序不一样,有可能导致死锁;在允许幻读和不可重复读的情况下,尽量使用 RC 事务隔离级别,可以避免 ga

死锁解决方案

解决总体的思路就是1、使用乐观锁mvcc机制,读取数据不上锁,在读情况下共享资源2、保证资源的加锁顺序,避免循环等待的产生3、减少对资源的占用时间和占用范围,避免长事务,锁粒度变大的情况,可以大大减少死锁产生的概率

InnoDB存储引擎笔记-文件

概述本章将分析构成MySQL数据库和InnoDB存储引擎表的各种类型文件。这些文件有以下这些。参数文件:告诉MySQL实例启动时在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还会介绍各种参数的类型。日志文件:用来记录MySQL实例对某种条件做出响应时写入的

mysql运行原理笔记-连接的原理

连接的原理连接过程简介从本质上来说,连接就是把各个表中的记录都取出来进行依次匹配,并把匹配后的组合发送给客户端。把t1和t2两个表连接起来的过程如图所示。这个过程看起来就是把t1表中的记录和t2表中的记录连起来组成一个新的更大的记录,所以这个查询过程称为连接查询。如果连接查询的结果集中包含一个表中的

mysql运行原理笔记-基于规则的优化

外连接消除前文说过,内连接的驱动表和被驱动表的位置可以相互交换,而左外连接和右外连接的驱动表与被驱动表是固定的。这就导致了内连接可以通过优化表的连接顺序来降低整体的查询成本,而外连接却无法优化表的连接顺序。外连接和内连接的本质区别就是:对于外连接的驱动表的记录来说,如果无法在被驱动表中找到匹配ON子

MySQL复制技术

复制技术的演进实际上有两条路线,一条路线为基于数据安全的复制技术演进;另一条路线为基于复制效率的复制技术演进。复制格式概述接触过MySQL的朋友都或多或少地知道,MySQL的复制是基于binlog(二进制日志)实现主从实例之间的数据同步的。binlog的格式可以分为三种,从某种意义上来说,也可以说对

MySQL性能优化

InnoDB存储引擎体系结构结合上图,我们可以看到,InnoDB存储引擎体系结构主要包含如下组件,分为两大部分。1、内存结构Buffer Pool:缓冲池是InnoDB在启动时分配的一个内存区域,用于InnoDB在访问数据时缓存表和索引数据。利用缓冲池,可以合并一些对经常访问的数据的操作,直接从内存

InnoDB存储引擎笔记-事务

事务的实现事务的隔离性由锁来实现的。原子性、一致性、持久性通过数据库的redo log和undo log来完成的。redo log称为重做日志,用来保证事务的原子性和持久性。undo log用来保证事务的一致性。redo和undo的作用可以视为是一种恢复操作,redo恢复提交事务修改的页操作,而un