mysql
2024-10-07 21:14:38 7 举报
AI智能生成
学习导图
作者其他创作
大纲/内容
锁
锁的分类
全局锁直接锁库
表锁,锁表,尽量不用,影响并发
mdl元数据锁,改数据或改表的时候自动加
意向锁,判断表里有没有锁
行级锁,innodb独家,记录锁锁数据,j间隙锁锁范围,组合使用锁一定范围内数据
死锁
死锁原因,两个事务互相拿到对方持有的锁一直等待锁释放
设置等待时间和死锁检测避免死锁
尽量按照相同的顺序来访问索引记录和表
尽量避免大事务,将大事物的范围拆解成小事务
读写避免全部集中在同一时间
悲观锁拿到资源就会锁住,资源只有单线程使用,乐观锁循环读取,可能成功或失败。
性能调优
mysql单表超过两千万行查询效率就会退化,一般超过500万行就考虑分表
使用explain查看sql语句执行流程与具体参数,optimizer trace查看具体方案
避免select*,关联尽量少的表,联查先查小数据集,避免索引失效
我感觉可以直接购买高性能的读写数据库云服务器,提升性能
offset超过1w就慢,因为每次查询都回表,业务上要避免,或者建立索引进行索引覆盖,
mysql基础
SQL语句
查询语句
多表查询语句
增删改sql语句
对应牛客网sql语句练习
mysql基础知识
执行流程,模块与引擎分类
数据类型char和varchar区别
三大范式,设计表的规范
索引
数据结构
b树,b+树的数据结构,两者的区别(便于顺序便利,避免中序遍历)
b+树与红黑树的其他持久化平衡树的区别(降低树的高度,降低oi次数)
索引和数据在b+树中存储方式,分为主键索引和二级索引,叶子结点分别存数据和索引地址
索引的工作原理
回表即通过非主键索引与主键索引两次搜索b+树拿到索引,为避免回表可以进行索引下推和索引覆盖优化
索引覆盖指将查询字段设置为索引,直接通过索引执行,无需访问数据页避免回表
索引下推在5.6版本后优化,将查询条件直接合并设置联合索引,在数据库引擎一次性过滤出数据
索引的应用
索引失效
使用左或左右模糊匹配
索引字段使用函数或表达式计算
索引数据类型存在隐式转换
查询条件不符合索引的最左匹配原则
索引应用
经常查询字段,取值排序,主键和外联字段建立索引
建立索引字段不宜过长,按照字段优先级建立符合最左前缀原则
经常需要修改,重复,参与计算的字段要慎重建立索引
当数据量少,无序,重复时慎重建立索引
count1和cont*的区别
count扫描时优化器会优先选择kenlen最小二级索引,所以最好建立二级索引,
cont字段会用全表扫描,尽量避免使用
cont*的优化可以使用近似值,或者用额外表维护
mysql事务
事务性质
原子性
隔离性
一致性
持久性
事务隔离级别
读未提交,无法解决并行问题
读已提交, 解决脏读的问题。
可重复读,默认级别,解决脏读和不可重复读的问题。
序列化,解决脏读,不可重复,和幻读的问题,
幻读优化
不建议升级成串行化,因为性能会变差
用mvcc实行快照读,查询数据在事务启动时绑定
加锁实行当前读,读取数据时直接加锁,不让其他事务修改数据
0 条评论
下一页