Msql高级性能优化(二)——性能篇

一、性能下降原因:

1.1)sql语句书写不好:

1.2)建立索引失效:

1.3)关联查询太多:

1.4)服务器调优和个别配置参数导致:

二、索引:

2.1)什么是索引:

帮助mysql高效获取数据的数据结构,类似于新华字典在索引目录,可以通过索引目录快速查询到想要在字段,

排好序快速在查找

2.2)为什么要建立索引:

  • 提高查询效率,通过索引进行排序,可以直接定义到想要在位置

2.3)索引优势:

  • 提高检索效率
  • 降低IO成本
  • 降低数据排序成本
  • 降低CPU消耗

2.4)索引劣势:

  • 索引本身很大,也是以文件形式存储在磁盘上
  • 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也需要占用磁盘空间
  • 虽然索引提高了查询效率,但是会降低更新表在效率,会调整因为更新表带来在键值变化后的索引信息

2.5)索引分类:

  • 单值索引:
  • 唯一索引:
  • 复合索引
  • 全文索引

三、三范式规则(3NF)

1NF:是指数据库当中每一列都是不可分割的基本数据项,同一列不能存储多个值

2NF:要求数据库每一行都是可以被唯一区分

3NF:要求一个表不包含其它表中的已包含的非主键字段信息

四、DQL的执行过程

Msql高级性能优化(二)——性能篇_第1张图片

 

五、explain使用:

Msql高级性能优化(二)——性能篇_第2张图片

5.1)使用方法

explain+sql语句

id)执行id

  • id相同时,执行顺序从上而下
  • id不同时,执行顺序从大到小

select_type)当前查询的类型

  • SIMPLE:简单的select查询,查询中不包含子查询或这UNION
  • PRIMARY:最外层查询
  • SUBQUERY:子查询
  • DERIVED:在from列表中包含子查询被标记为derived(衍生)
  • UNION:查询两张表的全集
  • UNION RESULT:两张表结果集

table)当前查询的对应表

partitions)如果查询是基于分区,显示分区

type)

访问类型排列

结果值:由差到好

  • ALL:全表扫描
  • index: 查询字段包含索引值字段
  • range:范围查询
  • ref:非唯一性索引扫描,
  • eq_ref:唯一性索引扫描、对于每个索引键,表中只有一条记录与之匹配,常见于主键或者唯一索引扫描
  • const:通过索引一次性找到对应的值,如直接查询主键或者唯一索引
  • system:表中只有一行记录(系统表),这是const类型特例,平时不会出现

possible_keys:可能使用到索引

key:实际使用到的索引

key_len:索引长度

ref:索引是否被引入到,引入情况展示

 

 

 

 

你可能感兴趣的:(mysql,mysql)