MySQL实战45讲
文章平均质量分 78
桥边驿语人
这个作者很懒,什么都没留下…
展开
-
【学习计划】《MySQL实战45讲》03 | 事务隔离:为什么你改了我还看不见?
文章目录一、新名词1. 事务2. ACID二、新指令1. show index2. analyze table3. force index三、新参数1. innodb_stats_persistent四、新知识点1. **MySQL** 中支持事务的引擎2. 脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)五、小结索引选择异常和处理一、新名词1. 事务事务就是要保证一组数据库操作,要么全部成功,要么全部失败。2. ACIDACI原创 2022-05-24 17:22:44 · 154 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》02 | 日志系统:一条SQL更新语句是如何执行的?
文章目录一、新名词1. redo log2. binlog(归档日志)3. WAL4. crash-safe二、新参数1. innodb_flush_log_at_trx_commit2. sync_binlog三、新知识点1. redo log 与 binlog 的不同2. update 语句执行流程3. 两阶段提交四、小结一、新名词1. redo logInnoDB 引擎特有的日志。2. binlog(归档日志)Server 层也有自己的日志3. WALWAL 的全称是 Write-Ah原创 2022-05-14 17:07:28 · 176 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》01 | 基础架构:一条SQL查询语句是如何执行的?
文章目录MySQL的逻辑架构图一、新指令1. mysql_reset_connection二、新参数1. wait_timeout三、新知识点1. MySQL 可以分为几部分?2. Server 层包含哪些?3. 存储引擎层负责什么?4. 防止长连接被系统强行杀掉的解决方案。5. 查询缓存6. 分析器做了什么?7. 优化器做了什么?8. 执行器做了什么?MySQL的逻辑架构图一、新指令1. mysql_reset_connectionmysql>mysql_reset_connection原创 2022-05-06 16:40:35 · 237 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》10 | MySQL为什么有时候会选错索引?
文章目录一、新名词1. 索引的“区分度”2. “基数”(cardinality)二、新指令1. show index2. analyze table3. force index三、新参数1. innodb_stats_persistent四、新知识点五、小结索引选择异常和处理一、新名词1. 索引的“区分度”一个索引上不同的值越多,这个索引的区分度就越好。基数越大,索引的区分度越好。2. “基数”(cardinality)索引上不同的值的个数。二、新指令1. show indexsh原创 2022-04-24 22:02:28 · 692 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》11 | 怎么给字符串字段加索引?
文章目录一、新名词前缀索引二、小结三、示例1. 前缀索引2. 倒序存储3. 使用hash字段一、新名词前缀索引定义字符串的一部分作为索引。二、小结字符串字段创建索引的场景可以使用的方式有:直接创建完整索引,这样可能比较占用空间;创建前缀索引,节省空间,但会增加查询扫描次数,并且不能使用覆盖索引;倒序存储,再创建前缀索引,用于绕过字符串本身前缀的区分度不够的问题;创建hash字段索引,查询性能稳定,有额外的存储和计算消耗,跟第三种方式一样,都不支持范围扫描。三、示例1. 前缀索原创 2022-04-25 22:46:54 · 703 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》12 | 为什么我的MySQL会“抖”一下?
文章目录一、新名词1. “脏页”2.“干净页”3. flush二、新参数1. innodb_io_capacity2. innodb_max_dirty_pages_pct3. innodb_flush_neighbors三、新知识点1. 什么情况会引发数据库的flush过程?2. 刷脏页对性能的影响3. 刷脏页写盘4. 内存页的三种状态一、新名词1. “脏页”当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。2.“干净页”内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一原创 2022-05-01 17:19:19 · 687 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》13 | 为什么表数据删掉一半,表文件大小不变?
文章目录一、新名词1. “Online DDL”2. “inplace”二、新指令alter table三、新参数1. innodb_file_per_table四、新知识点1. drop table 和 delete2. 数据页的复用3. 删除数据造成的空洞4. 插入数据造成的空洞5. Online 和 inplace 的关系6. optimize table、analyze table和alter table这三种方式重建表的区别。五、小结数据库中收缩表空间的方法一、新名词1. “Online D原创 2022-05-03 14:59:17 · 812 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》14 | count(*)这么慢,我该怎么办?
文章目录一、新知识点1. count(*)的实现方式2. 为什么InnoDB不跟MyISAM一样,也把数字存起来呢?3. 把计数保存在Redis和数据库的区别4. count(字段),count(主键id),count(1)和count(*)一、新知识点1. count(*)的实现方式MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高;而InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。原创 2022-05-03 17:51:29 · 105 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》15 | 答疑文章(一):日志和索引相关问题
文章目录日志相关问题1. MySQL怎么知道binlog是完整的?2. redo log 和 binlog是怎么关联起来的?3. 处于prepare阶段的redo log加上完整binlog,重启就能恢复,MySQL为什么要这么设计?4. 如果这样的话,为什么还要两阶段提交呢?干脆先redo log写完,再写binlog。崩溃恢复的时候,必须得两个日志都完整才可以。是不是一样的逻辑?5. 不引入两个日志,也就没有两阶段提交的必要了。只用binlog来支持崩溃恢复,又能支持归档,不就可以了?6. 那能不能反过原创 2022-05-05 17:00:19 · 188 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》16 | “order by”是怎么工作的?
文章目录一、说明示例二、新名词1. 全字段排序2. rowid排序3. sort_buffer3. sort_buffer_size三、新参数1. max_length_for_sort_data四、新知识点1. 排序在内存中完成,也可能需要使用外部排序?2. 确定一个排序语句是否使用了临时文件的方法3. 全字段排序 VS rowid排序一、说明示例假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。假设这个表的部分定义是这样的:CREATE TABLE `t`原创 2022-05-05 22:40:25 · 182 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》17 | 如何正确地显示随机消息?
文章目录一、新名词1. 内存临时表2. 磁盘临时表3. 优先队列算法二、新参数1. tmp_table_size2. internal_tmp_disk_storage_engine三、新知识点1. rand()2. rowid,每个引擎用来唯一标识数据行的信息。3. 随机排序方法四、小结一、新名词1. 内存临时表对于内存表,回表过程只是简单地根据数据行的位置,直接访问内存得到数据,根本不会导致多访问磁盘。优化器没有了这一层顾虑,那么它会优先考虑的,就是用于排序的行越少越好了,所以,MySQL这时就原创 2022-05-06 07:11:27 · 555 阅读 · 0 评论 -
【学习计划】《MySQL实战45讲》18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
文章目录案例说明1. 条件字段函数操作2. 隐式类型转换3. 隐式字符编码转换案例说明1. 条件字段函数操作示例代码:mysql> select count(*) from tradelog where month(t_modified)=7;对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。需要注意的是,优化器并不是要放弃使用这个索引。放弃了树搜索功能,优化器可以选择遍历主键索引,也可以选择遍历索引 t_modified,优化器对比索引大小后发现,索原创 2022-05-06 11:17:19 · 139 阅读 · 0 评论