随笔分类 -  mysql实战45讲

该分类来自mysql实战45讲--丁奇
摘要:14 count(*) count(*)实现方式 首先要声明,在不同的mysql引擎中,count(*)有不同的实现方式。 --myisam引擎把一个表的总行数存在了磁盘,因此执行count(*)的时候会直接返回这个树,效率很高。 --而innodb引擎就麻烦了,执行count(*)的时候,需要把数 阅读全文
posted @ 2019-08-12 14:26 春困秋乏夏打盹 阅读(291) 评论(0) 推荐(0) 编辑
摘要:13数据库表空间回收 问题,我的数据库占用空间太大,把一个最大的表删掉了一半的数据,怎么表的文件大小还是没有变? 一个innodb表包含表结构定义和数据,在mysql8.0之前,表结构都是以frm文件里,而8.0后已经允许把表结构定义放在系统数据表中 参数innodb_file_per_table 阅读全文
posted @ 2019-08-09 15:26 春困秋乏夏打盹 阅读(362) 评论(0) 推荐(0) 编辑
摘要:12 mysql性能抖动 sql语句为什么变”慢”了 在介绍WAL机制时,innodb在处理更新语句的时候,只做了写日志这一个磁盘操作,就是redo log,在更新内存写完redo log之后,就返回客户端成功。 当内存数据页和磁盘数据页内容不一致的时候,称这个内存页为”脏页”,内存数据写入磁盘后, 阅读全文
posted @ 2019-08-08 10:37 春困秋乏夏打盹 阅读(775) 评论(0) 推荐(0) 编辑
摘要:11 怎么给字符串加索引 现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引? 用户表定义 mysql> create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engine=inn 阅读全文
posted @ 2019-08-07 18:14 春困秋乏夏打盹 阅读(348) 评论(0) 推荐(0) 编辑
摘要:10 mysql选错索引 在mysql表中可以支持多个索引,有的sql不指定使用哪个索引,由mysql自己来决定,但是有时候mysql选错了索引,导致执行很慢。 例子 往表中插入10w记录 过程 分析sql语句 mysql> select * from t where a between 10000 阅读全文
posted @ 2019-08-06 09:54 春困秋乏夏打盹 阅读(252) 评论(0) 推荐(0) 编辑
摘要:9 普通索引和唯一索引,应该怎么选择? 例子,假设一个市民系统,每个人的身份证id唯一,而且业务代码也保证了不会出现重复的card,如果市民系统需要安装card来查询姓名,类似sql select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz 阅读全文
posted @ 2019-07-02 17:16 春困秋乏夏打盹 阅读(390) 评论(0) 推荐(0) 编辑
摘要:8 事务隔离级别 初始化表 Session a Session b Session c start transaction with consistent snapshot; start transaction with consistent snapshot; update t set k=k+1 阅读全文
posted @ 2019-07-01 17:16 春困秋乏夏打盹 阅读(360) 评论(0) 推荐(0) 编辑
摘要:7 怎么减少行锁对性能的影响? MySQL的行锁是在引擎层由各个引擎自己实现的,并不是所有的引擎都支持行锁,比如myisam引擎就不支持行锁,不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何 时刻只能有一个更新在执行,这就会影响到业务并发度。 这一章主要聊innodb的行锁,以 阅读全文
posted @ 2019-06-28 17:37 春困秋乏夏打盹 阅读(288) 评论(0) 推荐(0) 编辑
摘要:6 全局锁和表锁 数据库的锁设计是为了处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源访问的规则,而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,mysql里面的锁大致可以分为全局锁、表锁和行锁三类。 全局锁 全局锁就是对整个数据库实例加锁,mysql 阅读全文
posted @ 2019-06-24 17:40 春困秋乏夏打盹 阅读(340) 评论(0) 推荐(0) 编辑
摘要:5 深入浅出索引(下) 上一篇介绍了innodb索引的数据结构模型,这一篇将继续索引有关的概念 执行语句select * from T5 where k BETWEEN 3 and 5; 需要执行几次索引的搜索操作,会扫描多少行 先看索引的结构 分析sql语句的执行流程: --1 在k索引树上找到k 阅读全文
posted @ 2019-06-21 14:51 春困秋乏夏打盹 阅读(311) 评论(0) 推荐(0) 编辑
摘要:4 深入浅出索引(上) 这一节分析到底什么是索引,索引是如何工作的 索引的常见模型 索引的出现是为了提高查询效率,但是实现索引的方式有很多,三种常见简单的数据结构:哈希表、有序数组和搜索树。 哈希表是一种key-value存储数据的结构,思路很简单,把值放在数组里,用一个哈希函数把key换算成一个确 阅读全文
posted @ 2019-06-21 14:20 春困秋乏夏打盹 阅读(360) 评论(0) 推荐(0) 编辑
摘要:3 事务隔离:为什么你改了我还看不见? 在数据库中,事务是要保证一组数据库操作,要么全部成功,要么全部失败,在mysql中,事务在引擎层实现,innodb支持事务 隔离性与隔离级别 事务,ACID(atomicity,consistency,isolation,durability),分析i,隔离性 阅读全文
posted @ 2019-06-17 14:57 春困秋乏夏打盹 阅读(586) 评论(0) 推荐(0) 编辑
摘要:2 日志系统:一条sql更新语句是如何执行的? 前面了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后达到engine。 这里分析一个update语句的流程 mysql> create table T(ID 阅读全文
posted @ 2019-06-12 17:53 春困秋乏夏打盹 阅读(503) 评论(0) 推荐(0) 编辑
摘要:1 基础架构:一条sql查询语句如何执行? 分析一个最简单的查询 mysql> select * from T where ID=10; MySQL基本架构示意图 大体来说,mysql可以分为server层和存储引擎层 Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖mysql的大 阅读全文
posted @ 2019-06-11 15:53 春困秋乏夏打盹 阅读(564) 评论(0) 推荐(0) 编辑
摘要:45 MySQL自增id 表定义自增id 说到自增id,前面提到mysql的自增id不连续,当表定义的自增值达到上限后的逻辑是:再申请下一个id时,得到的值保持不变 2^32-1 不是一个特别大的数,对于一个频繁插入删除数据的表来说,是可能用完的,因此在建表的时候需要观察这个表是否有可能达到这个上限 阅读全文
posted @ 2019-06-10 17:16 春困秋乏夏打盹 阅读(500) 评论(0) 推荐(0) 编辑
摘要:44 答疑(三) Join的写法 35节介绍了join执行顺序,加了straight_join,两个问题: --1 如果用left join,左边的表一定是驱动表吗 --2 如果两个表的join包含多个条件的等值匹配,是都要写到on里面呢,还是只把一个写到on,把其他的条件写到where部分? 表a 阅读全文
posted @ 2019-06-04 16:17 春困秋乏夏打盹 阅读(403) 评论(0) 推荐(0) 编辑
摘要:43 使用分区表 有些时候,一些公司的规范不允许使用分区表,分区表有什么问题? 分区表是什么? 先创建一个分区表 表t在磁盘上的文件 在表中插入2条记录,按照分区定义规则,这2个记录分别落在2个分区上, 这个分区表,包含了一个.frm文件,每个分区对应一个ibd文件 --对于engine层来说,这是 阅读全文
posted @ 2019-06-03 17:11 春困秋乏夏打盹 阅读(224) 评论(0) 推荐(0) 编辑
摘要:42 grant与flush privileges 在mysql里, grant是给用户赋权的,一些文档中经常提到在grant执行后,马上执行一个flush privileges,才能使赋权语句生效,那么,grant之后真的需要执行flush privileges吗?如果没有执行这个flush操作, 阅读全文
posted @ 2019-05-28 17:10 春困秋乏夏打盹 阅读(724) 评论(0) 推荐(0) 编辑
摘要:41 快速的复制一张表 现在把db1.t的数据a>800的数据行导入db2.t Mysqldump方法 把结果输出到临时文件 -rw-rw-r-- 1 mysql mysql 4261 Mar 27 08:32 t.sql 生成一个insert语句里面包含多个values对,用这个文件来写入的时候, 阅读全文
posted @ 2019-05-27 18:00 春困秋乏夏打盹 阅读(316) 评论(0) 推荐(0) 编辑
摘要:40 insert语句的锁 上一篇文章中对mysql自增主键锁做了优化,尽量在申请到自增id后,就释放自增锁。 因此,insert语句是一个很轻量的操作,不过,这个结论对于”普通的insert”才生效,其他特殊的insert语句,在执行过程中需要给其他资源加锁,或者在无法申请到自增id以后就立马释放 阅读全文
posted @ 2019-05-23 16:38 春困秋乏夏打盹 阅读(339) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示