mysql 优化之索引

1、sql优化:

原因:性能低,执行时间太长,等待时间太长、sql语句欠佳,索引失效、服务器参
数设置不合理	
编写过程:
	select distinct from  join  on where group by having order by limit
解析过程:
	from   on    join    where group by  having  select distinct order by

2、sql优化: 优化索引

索引:index 帮助mysql高效获取数据的数据结构(B树、hash树、B+树)
mysql使用B树
有一个主节点  小于主节点的在左边 大于主节点的在右边,呈(二叉树)树状分布

3、索引

分类:
	单值索引:单列 加索引,一个表可以有多个单值索引
	唯一索引:不能重复。eg:id
	复合索引:多个列构成的索引(相当于二级目录)
创建索引:
	create 索引类型 索引名 on 表(字段)
	alter table 表名 索引类型 索引名(字段)
	单值:
	create index dept_index on tb(name)
	alter table tb add index(name)
	唯一:
	create unique index name_index on tb(name)
	alter table tb add unique index(name)
	复合索引:
	create index dept_name on tb(id,name)
	alter table tb add index(id,name)

删除索引:
	drop index 索引名 on 表名;
	drop index name ob tb
查询索引:
	show index from 表名;

4、sql性能问题

1、分析sql执行计划
expalin  模拟sql优化器 执行sql语句,从而让开发人员知道自己编写的sql
(1)id:id值相同,从上往下依次执行;id值不同,id越大越优先执行;id值有相同又有不同,id值越大越优先,id值相同,从上往下一次执行。
(2)select_type:查询类型
	 primary: 包含子查询sql的子查询(最外层)
	 subquery:包含子查询sql的子查询(非最外层)
	 simple:简单查询(不包含子查询,union)
	 derived:衍生查询(使用到了临时表)
		1、在from中只用到了一张表
		2、在from中两张表 tb1 union tb2, tb1就是dervied
	 union:如上
	 union result:告知开发人员那些表之间存在union查询
(3)type:索引类型
	 system>const>eq_ref>ref>range>index>all, 前提:必须有索引
	 其中system const 是理想型,实际能达到ref>range 
	 system只有一条数据的系统表 或者衍生表只有一条的主查询
	 const:仅仅能查到一条数据的sql,用于primary key或者unique索引(索引与
	 索引类型有关系)
	 eq_ref:对于每个索引建的查询,返回唯一值 
	 ref:非唯一性索引,对于每个索引列的查询,返回0或多行
	 range:范围查询,where之后是in(有时候会失效,转为all查询) >,<= ,between,
	 index:查询全部索引的数据
	 all:查询全部表中的数据

(4)possible_key:可能用到的索引,并不确定
(5)key:实际用到的索引
(6)key_len:索引的长度,用来判断符合索引是否被完全使用(a,b,c)
(7)ref:表之间的关系
(8)rows:被索引优化查询的数据个数(实际通过索引查询到的数据个数)
(9)Extra:
			using filesort:性能消耗大,需要额外的一次排序(查询)
			避免方法:where和order by按照复合索引的顺序使用,不要跨列
			或者无序使用,一般常见于order by语句中
			useing temporary:性能消耗大,用到了临时表。一般出现在
			group by语句汇总
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值