数据库的知识进阶
一、索引
1.1、基础知识
1.1.1、可以使用多少列创建索引?
任何标准表最多可以创建 16 个索引列
1.2、索引的底层结构
1.2.1、数据库规范
历史数据归档 ==> 数据抽数
数据库常见问题分析:
数据库慢查询分析
数据库热点数据定位
数据库锁
表锁
行锁
读锁
https://www.cnblogs.com/paul8339/p/9936005.html
锁跟索引有关系
select * from xx for update;
唯一性索引,进行行锁
非唯一性索引,进行间隙锁
无索引,对表进行加锁
???如何验证,即从官方文档找说明
什么场景下,会需要数据库锁?
1.3、死锁案例
select for update造成的死锁
讲述案例复现问题(案例中的特殊情况)
https://www.cnblogs.com/micrari/p/8029710.html
分析底层的原因
分析解决的方式
悲观锁
读锁
锁的规模(表锁、行锁、gap锁)取决于索引
写锁
乐观锁
1.4、慢查询常见原因
1.4.1、没有索引或者没有用到索引
最左匹配
什么情况下会用到索引?
1.4.2、出现锁等待或者死锁
什么情况下会出现死锁
1.4.3、查询出来的数据量过大
???到底多大才算是个大
1.4.4、网络抖动造成网速慢
这个主要体现在客户端较慢,只能排查硬件来跟进
1.4.5、数据库表数据量过大
数据量过大,会导致扫描的行数高;索引较大,造成多次I/O操作才能找到对应的行。
1.5、慢查询解决方案
1.5.1、升级硬件
索引命中只有的筛选,需要依赖CPU的计算;高QPS的情况下,I/O和CPU都可能出现瓶颈,这个时候要升级高配的机器支持。网卡问题,也造成读取缓慢,也要升级硬件。
1.5.2、纵向、横向分割表,减少表的尺寸
分库分表,一般是按照用户,商家等维护进行分库分表;避免单机热点问题。
1.5.3、优化查询方式
1、命中索引,索引的结构B树,B+数结构选择
2、根据业务特点,优化SQL让返回的行数要更少
1.5.4、对长期无用的数据归档
1、业务上限制操作返回,例如银行只能查询最近半年(3年)的流水记录
2、对于软删除的,业务上已经铁定不用的数据,进行归档