Mysql索引基础及原理

一、索引概述

1. 简介

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

  • 举例说明索引:如果把数据库中的某一张看成一本书,那么索引就像是书的目录,可以通过目录快速查找书中指定内容的位置,对于数据库表来说,可以通过索引快速查找表中的数据。

2.索引的原理

  • 索引一般以文件形式存在磁盘中(也可以存于内存中),存储的索引的原理大致概括为以空间换时间,数据库在未添加索引的时候进行查询默认的是进行全量搜索,也就是进行全局扫描,有多少条数据就要进行多少次查询,然后找到相匹配的数据就把他放到结果集中,直到全表扫描完。

  • 而建立索引之后,会将建立索引的KEY值放在一个n叉树上(BTree)。因为B树的特点就是适合在磁盘等直接存储设备上组织动态查找表,每次以索引进行条件查询时,会去树上根据key值直接进行搜索。

3.索引的优点

建立索引的目的是加快对表中记录的查找或排序!

  1. 建立索引的列可以保证行的唯一性。

  2. 建立索引可以有效缩短数据的检索时间

  3. 建立索引可以加快表与表之间的连接

  4. 为用来排序或者是分组的字段添加索引可以加快分组和排序顺序

4. 索引的缺点

  1. 创建索引和维护索引需要时间成本,这个成本随着数据量的增加而加大.
  2. 创建索引和维护索引需要空间成本,每一条索引都要占据数据库的物理存储空间,数据量越大,占用空间也越大。(数据表占据的是数据库的数据空间)
  3. 会降低表的增删改的效率,因为每次增删改索引需要进行动态维护,导致时间变长。

5 .索引的使用场景

数据库中表的数据量较大的情况下,对于查询响应时间不能满足业务需求,可以合理的使用索引提升查询效率。

6.索引的使用原则:

通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。

  1. 对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引。
  2. 数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
  3. 在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

7.基本索引类型

注意:

  1. 索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引
  2. MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换
  3. MEMORY/HEAP存储引擎:支持HASH和BTREE索引

簇聚索引和非簇聚索引

聚簇索引的叶子节点就是数据节点
而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针,需要回表查询。

索引分为四类来讲

  1. 单列索引(普通索引,唯一索引,主键索引)
  2. 组合索引
  3. 全文索引
  4. 空间索引

具体创建索引代码可参考原文链接:点击此处

8.Mysql的几种存储引擎

  1. InnoDB
  2. MyISAM
  3. Memory(heap)
  4. Archive
  5. CSV

MyISAM与InnoDB 的区别

二、索引实现原理

详情请看另一篇博文点击此处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值