06 2019 档案
摘要:幻读 场景例子(innodb的默认事物隔离级别是可重复读) CREATE TABLE ( int(11) NOT NULL, int(11) DEFAULT NULL, int(11) DEFAULT NULL, PRIMARY KEY ( ), KEY ( ) ) ENGINE=InnoDB; i
阅读全文
摘要:几个影响sql语句性能的例子 案例一:假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段。为了便于描述,我们先忽略其他字段。这个表的建表语句如下: mysql CREATE TABLE
阅读全文
摘要:orderby是如何工作的 场景例子:假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回 前1000个人的姓名、年龄。 表结构: SQL语句:select city,name,age from t where city="杭州" order by name limit 1000; 全字
阅读全文
摘要:count( )实现原理 不同引擎的实现: MyISAM引擎把表的总行数存在了磁盘上,执行COUNT( )就会直接返回,效率很高; InnoDB在count( )时,需要把数据一行一行的从引擎里面取出来然后累计记数。 注意如果有where过滤条件MYISAM速度就不是很快了。 为什么Innodb不和
阅读全文
摘要:mysql脏页 由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,就返回给客户端, 即更新成功。 把内存里的数据写入磁盘的过程,术语就是flush,在flush之前,实际数据和数据库中的数据是不一致的,因为在redo log
阅读全文
摘要:mysql为什么有时会选错索引 场景例子:一张表里有a,b两个字段,并分别建立以下索引 CREATE TABLE ( int(11) NOT NULL, int(11) DEFAULT NULL, int(11) DEFAULT NULL, PRIMARY KEY ( ), KEY ( ), KEY
阅读全文
摘要:唯一或普通索引的选择 业务需求 假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的SQL语句: 在不考虑身份证好字段大小的情况下,需要给id_card建立索引,是选择普通索引还是唯一索引呢?
阅读全文
摘要:行锁 innodb支持行锁,myisam只支持表锁,同一时刻每张表只能有一条数据被更新 在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放, 而是要等到事务结束时才释放。这个就是两阶段锁协议。 如果你的事务中需要锁多个行,要把最可能造成锁冲突、最可能影响并 发度的锁的申请时
阅读全文
摘要:mysql基本架构 server层 连接器:管理连接,权限验证,先查询缓存,命中则返回结果。 分析器:词法分析,语法分析 词法分析,识别关键字,转换成列表或列 语法分析,判断是否满足语法规则 优化器:执行计划生成,索引选择 join联表操作执行方法的使用 执行器:操作引擎,返回结果 取到满足条件的第
阅读全文