11.表的内外连接,索引

虽然可以and但是我们建议这样写,思路更清楚

索引就是mysql服务器运行期间的数据结构

找到扇区连续读八个就把块读到了

为什么是4KB,和内存管理有关,内存也分成4KB块为了让磁盘数据和内存数据进行更好交互,所以有了页框页帧概念2.既要保证io,改一个字节,也要读4KB,这样可以保证一次io拿更多数据3.我一次加4KB,可能后半部分会用到,局部性原理。提高整机效率。

操作系统也很聪明,可以整理我们命令,进而连续访问

mysql读数据,读16kb,操作系统都磁盘 4*4kb大小,硬件上就是16*8个扇区,加载到内存,mysql内部可以通过fsync刷新到磁盘

自己的page和操作系统的page是1:4的

一个个iopage都是一个个struct page结构体对象,io把外面配置搬到内存,不要了把内存搬到外面。内存中用链表管理page,对page管理变成对链表的增删查改,

为什么myql自动按主键排序,方便引入页目录

page*1024是page的字节,包含key和指针,除8+4就是1000多个page,单个page能管理1000多个个page,1360*1024*16/1024/2024=21M数据,

实际真实B+数只有叶子结点用链表联系起来,

mysql自动生成隐藏列充当主键进行排序,这种顺序性就很随机了。所有表都是索引结构。我么之前并没有按照员工主键构建索引,所以查找很慢。

其他数据结构为什么不行:二叉搜索树很高,io效率不好,极端情况变成线性,

将所有数据放到叶子结点就是innodb默认存储表数据的存储结构,还有一种misam存储引擎:

两种引擎不同文件,mysam是非聚簇索引。

太浪费空间,

只要有主键,默认就创建了主键索引,若又给其他列设置索引,重新构建B+ 树,sam直接诶只想数据记录,innodb指向key。

两个完全匹配才算找到,这是一个B+树,默认使用多列第一列作为吧+树名称,这叫复合索引

我想非常高频的通过name找到email,用复合索引,key值本身就是想要的值,匹配到张三直接就返回qq,不用回表,这叫索引覆盖,覆盖的主键索引,不回表,从左侧开始匹配,qq就没法匹配,可以只拿张三,也可以山三,qq

全文索引:misam,支持高并发读,

相关推荐
冰之杍1 天前
MySQL utf8mb3 → utf8mb4 完整修改方案
数据库·mysql
这个DBA有点耶1 天前
一文讲透数据库分类:关系型、非关系型、OLTP、OLAP、分布式、多模……
数据库·mysql·架构
Oracle恢复实录1 天前
SQL优化改IN躲开全表扫描性能提升53倍
mysql
leo_yu_yty1 天前
Mysql 面试准备
数据库·mysql·面试
冰暮流星1 天前
mysql练习1
数据库·mysql
蜀道山老天师1 天前
Zabbix监控MySQL与Redis应用实践完整指南
linux·运维·redis·mysql·zabbix
NJCloud2 天前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb
wear工程师2 天前
Redis 和 MySQL 缓存一致性,延迟双删为什么不是强一致
redis·mysql
这个DBA有点耶2 天前
数据库迁移灰度验证:从读流量到双写再到全量切换的完整路径
数据库·mysql·架构