1.主从
2.集群
3.分布式
(1)路由
(2)存储
(3实例
1.索引面试面试题优化
2.索引的数据结构
mysql 底层 b+tree 和hash
(a). 二叉树:容易一条链到底单边增长,不会分叉.
(b). 红黑树:深度很长 (数据量大的时候深度会很深)
©. hash:用hash 不太适用于范围查找 比如a>5
(d). b-tree:每个节点(度)增加存储数量,且深度保持一样 ,横向发展 百万数据 最多6层 ,每个类型都是k,v 类型 k 索引 v数据值.
,但是mysql 是用b+tree(因为磁盘和内存的交互页的大小限制了交互 所以用了b+tree 把度里面只存key)
(e). b+tree : 把度里面只存key ,数据value 放在叶子结点 ,增加了指针叶子节点的尾元素和下一个叶子结点的元素相连(方便范围查找)
数据交互
javv<—>CPU <–>RAM<----如果内存没有才会去硬盘查找交互单位是页(4K)- 页多整数倍(根计算机硬件有关)–> 硬盘
3. 存储引擎 (是表级别不是数据库级别) 默认是innoDB
4.MYISAM 和innodb
两个文件个数不一样
(a.)MYISAM (.frm 表结构 .MYD 数据 .MYI 索引
非聚集索引
:主键索引 和其他列名索引存储相似 key 加上索引的列名 值 ,data 是值的磁盘地址
(b.)innodb (frm 表结构,ibd 数据+索引)
聚集索引(查询快,节省存储空间,数据一致性<一起存储减少分布式查找>)
主键索引 : key 加上索引的列名 值 ,data 整行记录保存
其他列索引:key 加上索引的列名 值 ,data 主键
innodb 必须要有主键 ,没有主键 默认会找一个做为主键
因为innodb 有一个主键文件,所以必须要有主键(要用自增主键<那让存储结构可以存在连续性>)
为什么用数字 不用uuid ?
(a) id 容易比较大小 字符串需要用ASCII 去比较 不容易比较大小,
(b) 而且id 容易有序排序 ,读取一页数据的时候方便范围查找.uuid 容易插入时候无序 且可能树分裂
5.联和索引的底层数据结构长什么样子?
(a) 从第一个 一个一个比较.依次在第二个 一个一个比较
(b)
- inner join :组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。
left join
left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
right join
right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。
与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。



