认识索引(一)

认识索引(一)

其实很多小伙伴不是很明白索引的认识和使用,因为大学中的数据库课程中虽然有讲到,但是估计有70%的同学都是没有深入理解,甚至很多程序员在进入工作之后,依旧不是很明白索引的使用(比如当初进入公司第一个月实习的我),所以打算好好整理一下关于索引的知识点,Mysql是大家在使用中比较常见的数据库,我们就以它来作为例子。

什么是索引

首先我在使用索引之前,先要了解什么是索引?

​索引其实就是一种提升数据库查找数据速度和效率的一种数据结构。

​所以它就是来加快查询速度的,也就是更快的查。因为我们在增删查改中最普遍就是查找,而在大数据量下的查找则是需要解决的问题,那么使用索引就是比较常见的解决方法。

​那么,我在这里抛出一个问题:索引可以提升查询速度和效率,那么它会影响where条件查询,以及order by排序吗?

​这个问题希望小伙伴在看完我的关于索引index的系列文章之后可以获得答案。

常见的索引类型

说到索引的类型,那么小伙伴们肯定知道很多,比如:唯一索引,主键索引,辅助索引,聚集索引,复合索引等等。

​但是这些分类其实是比较混乱的,因为没有一个分类的标准,比如手机分类,可以按照操作系统分,有IOS手机,Android手机,windows手机,也可以按照品牌分,华为手机,小米手机,苹果手机。也可以按照使用人群分,老年手机,智能手机等等。

​索引我们要有一个分类的标准去分:

  1. 从索引的存储结构去分类:B Tree结构、Hash结构、FULLTEXT结构、R Tree结构等等

  2. 从索引的应用层次划分:普通索引、唯一索引、主键索引、复合索引

  3. 从索引的键值来分:主键索引、辅助索引(也叫二级索引)

  4. 从索引的键值逻辑关系和数据存储来分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)

应用层次划分下的索引

​ 从应用层次来划分是比较贴合实际的业务场景的,因为如果不是中大型公司,甚至都不用设置很复杂的索引,有的甚至不用索引。。。

1.普通索引

​ 普通索引其实最基本的索引类型,其实就是基于普通字段创建的索引,没有任何的限制。

​ 创建索引的方式:

create index <索引的名称> on tablename(字段名);
alter table <表名> add index [索引的名字](字段名);
create table 表名([...], index [索引的名字](字段名));
2.唯一索引

​ 唯一索引是普通索引的升级版本,其实从名字也能看出来,索引字段必须是唯一的,但允许有空值。在创建或修改表时,追加唯一约束,就会自动创建对应的唯一索引

create unique index 索引名 on 表名(字段名);
alter table 表名 add unique index 索引名(字段名);
create table 表名([...], unique 索引名(字段名));
3. 主键索引

主键索引是一种特殊的唯一索引,因为它不允许有空值。在创建和修改表的时候,追加主键约束即可,每一个表只能有一个主键。

create table 表名([...], primary key(字段名));
alter table 表名 add primary key(字段名);
4.复合索引

​复合索引其实是区别于单一索引的,单一索引是指索引列是一列的情况,简单说,就是索引只作用到一列;

​那么复合索引就好理解了,就是可以在多个列上创建的索引,也叫它组合索引。复合索引可以替代多个单索引,并且开销还比多个单索引更小。

​并且索引有宽索引和窄索引之分。窄索引一般指的是作用在1~2列的索引,宽索引就是作用在2列以上的索引。

设计索引的时候,尽量使用窄索引,能用窄索引的别用宽索引,因为往往窄索引比宽索引更有效。

create index 索引名 on 表名(字段1,字段2...);
alter table 表名 add index 索引名(字段1,字段2...);
create table 表名 ([...], index 索引名(字段1, 字段2...));

复合索引的注意事项:

  • ​ 何时使用复合索引,要根据where条件建索引,注意不要过多的使用索引,过多使用会对更新操作的效率产生很大的影响。
  • ​ 如果表已经创建了(col_A, col_B) 那就没有必要单独创建索引(col_A), 如果现在有(col_A)索引,如果查询需要col_A和col_B条件,可以建立(col_A, col_B)复合索引,对于查询一定提高

总结

​ 本文简单的讲述了关于索引的简单知识,并对其中的应用层面的索引分类进行单个讲解,大家应该有一个比较模糊的认识,下一篇文章将会仔细的剖析各个分类的索引,让大家有更清晰的认识。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值