mysql 总结

1. 索引类型:

(1)hash索引:hash索引主要是用来判断等值查询效率比较高,缺点:不支持范围查询,不支持排序,数据量变大hash碰撞增加, 导致查询效率降低,

(2)b+tree 索引 : 聚簇索引(主键索引) 与非聚簇索引(非主键索引),两者区别主要:1,聚簇索引的叶子节点存放的是整条数据,非聚簇索引存储的是主键id,需要回表查询;

    b+tree 的优点:由于mysql获取数据是通过每页page(16kb)获取的, b+tree 的数据枝节点存放的都是索引;

(3)fulltext(全文索引):主要解决模糊查询效率慢的问题, 目前只能在char 、 varchar、text类型的字段添加全文索引;

(4)rtree:一般很少使用, 相比b+tree 索引,范围查询效率更高


2. 为什么选用b+tree 作为存储数据?

1.只用叶子节点存储数据 , 非叶子节点存储索引

2.相同数据量,相比其他数据结构,比如:二叉树,平衡二叉树、红黑树高度更低,读取数据io操作少

3. 什么是聚簇索引、非聚簇索引?

(1)顺序结构与存储的物理结构一致的索引,并且一个表中聚簇索引只能由唯一的一条

(2)非聚簇索引 与存储的物理结构没有关系,一个表中可以创建多个, 根据不同列的约束可以建立不同的要求的非聚簇索引

4. 索引的种类?

(1)普通索引:仅加速查询

(2)唯一索引:加速查询+列值唯一(可以为null)

(3)主键索引: 加速查询+列值唯一 不能为null +表中只能有一个

(4)组合索引:多个列组成一个索引,专门用于组合搜索,其效率大于索引合并(基于做前缀原则, 一般把经常用于 查询的列放在最左边)

(5)全文索引: 对于文本内容进行分词,进行搜索(比模糊查询效率高)

(6)覆盖索引:所查询的列可以在索引中找到, 不需要读取数据行

 

5.sql一般怎么优化?

(1)选择合适的列添加索引

(2)使用expalin看是在排序与查询的时候使用到自己定义的索引

(3)编写sql 注意优化:

1.使用limit对查询结果进行限定

2. select * 替换成具体业务需要的查询列

3.等号左边列上不做运算

4.OR改成IN,OR的效率是n,IN的效率是log(n),注意in括号里面有长度限制

5.使用同类型进行比较

6.避免在where 后面使用!=或者<>操作符号

7.对于联系数值,使用between 不用in

8.组合索引基于做前缀原则


6.MYSQL 的事务?

(1) 事务遵守acid原则,原子性(要么都成功,要么都失败)、一致性(事物前后的数据完整性要保证一致)、隔离性(事务之间互不影响)、持久性(事物一旦提交则不可逆,被持久化到数据库中)

(2)事务的隔离级别:

1.读未提交 (隔离级别最低,有可能产生脏读,脏读指一个事务读取了另外一个事务未提交的数据)

2.读已提交(事务提交的数据才能读到,可以避免脏读,但会导致不可重复读,不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。)

3.可重复读 (事务提交的数据读不到,可以重复读取数据,会导致幻读,幻读是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。)

4.串行化(可以避免幻读,但是吞吐量太低,用户体验太差)

7.mysql mvcc知道吗? 它是怎么流程?

https://baijiahao.baidu.com/s?id=1690462040725127226&wfr=spider&for=pc

posted @ 2022-04-10 09:27  花落知到啥  阅读(26)  评论(0编辑  收藏  举报