索引

###1.默认情况下,一旦创建了一个表,这个表设置了主键,那么mysql会为这个主键创建一个unique索引。
###2.索引的类型:
1.Normal:普通索引,允许一个索引值后关联多个行值。
2.Unique:唯一索引,允许一个索引值后只能有一个行值。对列添加唯一约束其实就是添加了一个唯一索引。
3.Fulltext:全文检索,mysql的全文检索只能使用myisam引擎,并且性能较低,不建议使用。
###3.索引的方法(规定索引的存储结构)
1.b-tree:二叉树 平衡二叉树 平衡树
使用平衡树实现索引,是mysql中使用最多的索引。在innodb中存在两种索引类型,第一种是主键索引,在索引内容中直接保存数据地址,
第二种是其他索引,在索引内容中保存的是指向主键索引的引用,所以在使用主键索引的时候,要尽量使用主键索引,速度非常快。
b-tree中保存的数据都是按照一定顺序保存的数据,是可以允许在范围之内进行查询
2.hash:把索引的值做hash运算,并存放到hash表中,使用较少,一般是memory引擎使用。优点:因为使用hash表存储,hash的性能比b-tree
效率高很多。
hash索引的特点:
1.hash索引只能适用于精确的值比较,=,in或者<>,无法使用范围查询。
2.无法使用索引排序
3.组合hash索引无法使用部分索引
4.如果大量索引hash值相同,性能较低
###4.索引的利弊
1.索引的好处:
1.提高表数据的检索效率
2.如果排序的列是索引或者查询的列是索引,大大降低了排序和查询成本
3.在分组操作中如果分组条件是索引,也会提高效率
2.索引的问题
1.索引需要额外的维护成本,因为索引文件是单独存在的文件,对数据的增加、修改、删除都会产生额外的对索引的操作,这些操作
需要消耗额外的IO,会降低增/改/删的效率
###5.创建索引
1.较频繁的作为查询条件的字段应该创建索引
2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
作为索引的列,如果不能有效的区分数据,那么这个列就不适合做索引,比如性别 状态不多的列
3.更新非常频繁的字段不适合创建索引,原因:索引有维护成本
4.不会出现在where子句中的字段不该创建索引
5.索引不是越多越好,只为必要的列创建索引
1.不管你有多少个索引,一次查询至多采用一个索引,原因:一个索引是一个索引树,索引和索引之间是独立的
2.因为索引和索引之间是独立的,所以每一个索引都是单独维护的,数据的增改删会导致所有的索引都要单独维护
###6.索引的使用限制
1.blob和text的列只能创建前缀索引
2.mysql目前不支持函数索引(在mysql中,索引只能是一个列的原始值,不能把列通过计算的值作为索引)
3.使用不等于的时候mysql无法使用索引
4.join语句中join条件字段类型不一致时mysql无法使用索引
5.使用like操作的时候如果条件以通配符开始,(’%abc’)mysql无法使用索引
1.字符串是可以用来作为索引的
2.字符串创建的索引按照字母顺序排序
3.如果使用like,示例select * from userinfo where realname like ‘张%’,这种情况是可以使用索引的
但是like '_嘉’或者like '%嘉’是不能使用索引的。

6.使用非等值查询的时候mysql无法使用hash索引
###7.单列索引和复合索引
1.因为一个列查询至多只能使用一个索引,如果都使用单列索引,在数据量较大的情况下,不能很好的区分数据
所以mysql引入了复合索引
2.复合索引是由多列的值组成的索引,并且注意多列的索引是有顺序的!!!!!
3.复合索引的原理:就是类似order by(order by后面可以跟多个排序条件 order by username,hier_date desc)
就是在排序和分组(创建倒排表的时候),按照多个列进行排序和合并
4.复合索引在查询的时候,遵守向左原则。就是按照复合索引从左到右的顺序依次查询,不管查询条件是否完全满足
所有复合索引的列,都可以使用部分的复合索引
5.在实际应用中,基本上都使用复合索引
###8.查看mysql的执行计划和执行明细状态(explain+profiling)

2.profiling
命令行界面:
打开:set profiling=1
关闭:set profiling=0
查看执行语句:show profiles;
查看执行状态:show profile for query 1;
查看CPU,io:show profile cpu,block io for query 1;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值