重要字段说明:
select_type:使用的select查询类型 , 比如simple、primary、union、subquery等;
table:关于访问哪张表 , 如果是多表 , 则按访问的先后排序排列;
type:非常非常重要的指标 , 表示mysql在表中找到行记录的方式 , 又称访问类型 。访问类型的性能指标从差到好依次是system > const > eqref > ref > fulltext > refornull ? indexmerge > uniquesubquery > indexsubquery > range > index > ALL, 一般来说 , 得保证查询至少达到range级别 , 最好能达到ref,否则可能出现性能问题;
possible_keys: 可能用到的所以 , 如果为null , 表示没有可能用到的索引;
key:用到的索引 , 如果为null , 表示没有使用索引;
key_len: 按字节计算的索引长度 , 值越小 , 表示越快;
ref:关联关系中另一个表的列名称;
rows: 查询数据返回的行数;
extra:与关联操作有关的信息
索引优化
1.禁止无边界范围查询 != , < , > , <= , >= 否则 不会命中索引 。
2.禁止无边界范围查询 NOT IN , 否则不会命中索引
3.禁止左模糊或全模糊查询 , 否则不会命中索引
4.字段的默认值不要为null , 否则不会命中索引(使用默认约束Default Counstraint)填充数据默认值
5.在字段上计算后 , 不会命中索引
6.组合索引的最左前缀原则
7.关于number类型的字段不加单引号也会走索引
8.对于多表 JOIN 时的 ON 条件中 字段类型一定要一致 , 否则也不会命中索引
9.varchar 查询性能比 bigint 好 , 因为bigint类型字段上会全表扫描 , 而在varchar上每个字符判断会走索引 , 这样避免全表扫描 。
10.小数类型使用decimal,禁止使用float与double float和double存储数据时 , 可能或损失精度 , 进而判断的时候导致结果不准 , 强制使用decimal数据类型 。
11.表达是否的概念时 , 字段使用is_开头 , 数据类型使用unsigned tinyint类型 , 1表示是 0 表示否 。
12.任何非负数都必须声明为unsigned类型 比如年龄 。状态吗等 , 这样最大容量正值会扩大一倍 。
13.如果存储的字符串长度几乎相等 , 必须使用char定长字符串类型 比如手机号码11位 。
14.有时候是不需要建索引 性别字段 , 状态 , 这种不同值很少的字段是不需要建立索引的 。
15.单表行数超过500万行或单表容量超过2G , 才推荐分表
16.进行update或delete时 , 必先select , 避免出现误删数据
数据库拆分数据库承载的数据以及请求负载较高时 , 我们就要考虑使用读写分离、数据缓存 。但随着业务的增长 , 数据库的压力达到了承载的阀值米就要考虑分库分表 , 分解 , 分摊单个数据库压力 。
垂直拆分
数据库的垂直拆分:通常将所有的数据按照不同的业务建立并存储不同的表(table),垂直拆分是按照业务将一个数据库拆分多个数据库 。原来每个业务对应一张表 , 垂直拆分后 , 是一个业务对应一个数据库(当然也有坑可能是多个业务对应一个数据库) 。其核心是专库专用 。达到的结果是将原来一个数据库系统的压力按照业务均摊到各个拆分后的数据库中 。垂直拆分也是比较推荐的一种拆分方式 。
垂直分片往往需要对架构和设计进行调整 。在当前微服务化的进程中 , 对数据库的垂直拆分是非常友好的 。
数据表的垂直拆分:单表的数据达到2GB或者500万行记录就要考虑拆分数据表 , 垂直拆分表就将热点列和不经常使用的列表拆分开 , 降低单表的大小 。
水平拆分
当一般垂直拆分遇到瓶颈时 , 会对数据表进行水平拆分 。这种方式与垂直拆分不同的地方是 , 他不会更改表结构 。水平分表是将一个表拆分成多结构相同的多个表;并且这些表分布在不同的数据库 。
分库分表中间件有两种 1.代理模式的分库分表中间件:MyCat; 2.客户端模式的分库分表中间件:ShardingJDBC 3.支持事务的分布式数据库(当然ShardingProxy也是代理分库分表中间件)
总结: 结合着微服务体系 , 一般会进行垂直拆分 。当微服务中的数据库出现压力时 , 然后进行水平拆分 。
推荐阅读
- 如何快速在mysql中生成大量Mock数据做性能测试?
- Mysql非默认端口下命令行登录
- 常用数据库的最大连接数的获取和修改
- MySQL报错找不到问题?可能是你的SQL用了关键字
- 详解数据库三个核心性能指标--TPS\QPS\IOPS
- Oracle数据库之如何快速查找未使用绑定变量的SQL语句
- 关于提高中高档茶叶产量的些建议
- 关于消费者保证金说法正确的是 消费者权益保证金
- 关于红茶,必看,收藏起来吧!
- 关于 rpm 包,那些你不知道的事情
