数据库--知识进阶

数据库的知识进阶

  • 一、索引
    • 1.1、基础知识
      • 1.1.1、可以使用多少列创建索引?
    • 1.2、索引的底层结构
      • 1.2.1、数据库规范
    • 1.3、死锁案例
    • 1.4、慢查询常见原因
      • 1.4.1、没有索引或者没有用到索引
      • 1.4.2、出现锁等待或者死锁
      • 1.4.3、查询出来的数据量过大
      • 1.4.4、网络抖动造成网速慢
      • 1.4.5、数据库表数据量过大
    • 1.5、慢查询解决方案
      • 1.5.1、升级硬件
      • 1.5.2、纵向、横向分割表,减少表的尺寸
      • 1.5.3、优化查询方式
      • 1.5.4、对长期无用的数据归档

一、索引

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、对于软删除的,业务上已经铁定不用的数据,进行归档

你可能感兴趣的:(技术博客,mysql)