ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

索引及执行计划

2022-08-13 16:34:28  阅读:186  来源: 互联网

标签:name 索引 stu add 计划 table 执行 alter


索引及执行计划

索引

	1.索引就像一本书的目录,它能够让你更快的找到自己想要的内容
	2.索引让获取的数据更有目的性,从而提高数据库检索数据的性能
# 给指定的字段排序,添加索引,但是索引并不是越多越好,也不是每个字段都必须加索引

索引的类型

1.BTREE
	B+树索引
2.HASH
	HASH索引
3.FULLTEXT
	全文索引
4.RTREE
	R树索引

Btree算法

三路Btree

根节点
支节点
叶子节点
  • Btree

  • B+tree

# B+tree和Btree的区别
1.B+tree优化了范围查询
2.B+tree在叶子节点上添加了相邻的指针
  • B*tree

索引管理

	索引建立在表的列(字段)上,在where后面的列建立索引才会加快查询速度

索引分类

主键索引
唯一键索引
普通索引
	前缀索引
	联合索引

创建索引

# 创建普通索引
	alter table 表名 add index 索引名(字段);
	alter table stu add index idx_name(name);
	
# 查看索引
	show index from 表名;
	desc 表名;
# 索引类型
	PRI:主键索引
	UNI:唯一键索引
	MUL:普通索引
# 删除索引
	alter table 表名 drop index 索引名;
	alter table stu drop index idx_name;

# 添加主键索引
	altre table 表名 add primary key(字段);
	alter table stu add primary key(name);
# 删除主键索引
	alter table 表名 drop primary key;
	
# 添加唯一键索引
	alter table 表名 add unique key 索引名(字段);
	alter table stu add unique key uni_name(name);
	## 添加唯一键要求:该字段的数据不能有重复名
# 删除唯一键索引
	alter table 表名 drop index 索引名
	alter table stu drop index uni_name;
# 判断是否可以在该字段上创建唯一键
1.先统计该字段总共有多少行
select count(name) from stu;
2.再统计,去重后,该字段有多少行
select count(distinct(name)) from stu;
3.查看两个数据的结果是不是一样的,如果是一样的则可以创建唯一键索引,如果两个数值不一样,则无法创建唯一键索引

前缀索引(给某一字段数据内容特别长的列,创建前缀索引)

# 普通前缀索引的创建
	alter table 表名 add index 索引名(字段(数字))
	alter table stu add index idx_name(name(3));
# 唯一键索引前缀索引创建
	alter table 表名 add unique key 索引名(字段(数字))

注:	
1.避免对大列(数据长的列)建索引
2.如果要建,那么用前缀索引

联合索引(将多个字段,做成一个索引)

# 联合索引的查询顺序要和创建是的顺序一致,才可以提高效率

# 普通联合索引创建
	alter table 表名 add index 索引名(字段1,字段2...)
	alter table stu add index idx_all(id,name);
	
# 主键联合索引创建
	alter table 表名 add primary key (字段1,字段2...)
	alter table stu add primary key (id,name);
	
# 唯一键联合查询
	alter table 表名 add unique key 索引名(字段1,字段2...)
	alter table stu add unique key unq_all(id,name);
	
## 索引无法直接修改,删除索引后重新创建

索引效率查询

## explain(执行计划):检测一个SQL语句的执行效率,将explain加在要执行的sql语句之前即可,desc同explain。查看SQL语句的执行效率主要看type列
例:
	explain select * from stu;
效率:
	全表扫描
	索引扫描

全表扫描

ALL:最好不要出现ALL除非
	1.业务确实要获取所有的数据
	2.不走索引导致的全表扫描
		没索引
		索引创建有问题
		sql语句有问题
		索引损坏

索引扫描

index:全索引扫描,将创建索引的列的全部数剧都查询出来
例:
	explain select id from stu;

range:范围查询,一般来说,一条SQL语句,只要达到该级别即可
例:
	explain select * from stu where id>2;

ref:唯一键索引的前缀扫描或者非唯一索引扫描(精确查询)
例
	explain select * from stu where id=1;
eq_ref:连表查询,传统连接,join on
例:
	explain select stu.name,stude.id from stu join stude on stu.id=stude.id and stu.id='4';
	
const、system:主键精确查询
例:
	explain select * from stu where name='jd';

null:不进行表的扫描,一个不存在的条件

标签:name,索引,stu,add,计划,table,执行,alter
来源: https://www.cnblogs.com/zlyj/p/16583359.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有