一、性能下降原因:
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的执行过程
五、explain使用:
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:索引是否被引入到,引入情况展示