mysql中索引相关及性能优化第一篇(基础+explain的字段解释)

第一部分 基础

一、索引的定义:排好序的快速查找数据结构(BTREE)

二、索引作用:1查找 2排序  具体表现:1提高检索效率,降低数据库io成本 ,2降低排序成本,降低CPU消耗

小tap:java层删除数据有时候是update标志位为删除状态,因为真正删除数据需要重新建索引

一般来说索引本身也很大,所以以文件的形式存放在磁盘上

三、索引创建、查看、删除

创建
第一种:create [unique] index indexname on tableName(columnName(length));
第二种:alter tablename add [unique] index [indexname] on (columnname(length));
删除:drop index [indexname] on tablename;
查看:show index from tablename

四、哪些时候需要建索引

1.主键自动建立唯一索引

2、频繁作为查询字段的列

3、查询中与其他表关联的字段

4、排序和分组可以使用到索引

五、哪些时候不需要建索引

1、表数据很少

2、经常增删改的表

3、数据重复且分布平均的字段

 

第二部分 性能分析

一、explain + sql语句,分析sql语句的必备技能

 

  

id

(表的读取顺序)

select的查询序号,包含一组数字,表示查询中执行select子句或操作表的顺序

三种情况:1、id相同,执行顺序从上到下顺序进行

                  2、id不相同,执行按从大到小执行

                  3、有相同有不同,结合1/2总和顺序

select_type

(数据读取的操作类型)

simple:简单的select查询,不包含子查询和union

primary:查询中若包含复杂的子部分,则最外层是这个

subquery:子查询的一些查询

derived(衍生):在from列表中包含子查询被标记成这个,mysql会递归执行这些子查询,吧结果放入临时表

union:若第二个select出现在union之后,会被标记为union

union result:从union表获取结果的select

type

(显示查询使用了何种类型)

从好到坏依次是:system》const》eq ref》ref》range》index》all

system:表只有一行记录,平时不会出现,忽略不计

const:表示通过索引依次就找到了,主要见于where后面的列为主键索引列等(如主键,不同率是100%)

eq ref:唯一性索引扫描,对于美国索引建,表中只有一条记录与之匹配(有不同和相同的,查的是唯一的那个)

ref:(有不同和相同的,查的是相同的那些)

range:检索范围,一般where中出现between或in的,比全表扫描快

index:遍历索引树,比如select id from t;id列建索引

all:不走索引

possible_keys

(可能用到的索引)

显示可能用的索引,一个或多个,但不一定会被实际使用

key

(实际用到的索引)

实际使用的索引,如果为null,那么没有用到索引

覆盖索引,理论上没用索引,但是实际中用到

key len在不损失精度的情况下,长度越短越好
ref显示哪一列的值被使用去查索引。哪些列或常量被用于查找索引列的值(如果显示const就是指常量)
rows每张表实际使用索引查询了多少行

extra

(额外信息)

using filesort:mysql进行了外部索引排序(mysql自己建了临时索引),没有用已建好的索引

using temporary: mysql建了临时表进行存储,完成排序和分组的查询

以上两个是负面影响

using index:查询用到了覆盖索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值