5. 索引知识点

索引基础知识点

索引的介绍(理论)

1)概念

索引是对数据库中一个或多个列值的排序,帮助数据库高效获取数据的数据结构。假如我们用类比的方法,数据库中的索引就相当于书籍中的目录一样,当我们想找到书中的莫个知识点,我们可以直接去目录中找而不是在书中每页的找,但是这也抛出了索引的一个缺点,在对数据库修改的时候要修改索引到导致时间变多。

2)分类

  • 普通索引

  • 唯一索引

  • 主键索引

  • 全文索引

3) 优点

  • 加快检索速度

  • 唯一索引确保每行数据的唯一性

  • 在使用索引的过程可以优化隐藏器,提高系统性能

4 ) 缺点

  • 插入 删除 修改 维护速度下降

  • 占用物理和数据空间

什么是索引

索引是一种利用 某种规则的数据结构与实际数据的关系加快数据查找的功能;索引数据节点中有着实际文件的位置,因为索引是根据特定的规则和算法构建的,在查找的时候遵循索引的规则可以快速查找到对应数据的节点,从而达到快速查找数据的效果;其实宏观来说索引其实是一种概念而不是具体的某项技术,只是我们在某个技术中运用得比较广泛和鲜明(比如说数据库)渐渐的有了特定领域的标签,其实在生活中索引的使用无处不在,比如说:书本里的目录;读书时的座位号,考试编号都有类似索引的功能;

总结:

所有通过某规则数据结构和实际目标关联,根据特定规则算法快速寻址的功能都可以称之为索引;

为什么要用索引,以及索引的原理

首先我们看下在没有索引的情况下是怎么查找数据的:

我们用一个例子来解释比较直观

(1)没有索引的情况下访问数据:
在这里插入图片描述

(2)使用平衡二叉树结构(请看推荐资料)索引的情况下访问数据:
在这里插入图片描述

第一张图没有使用索引我们会进行 顺序查找 ,依照数据顺序逐个进行匹配,进行了5次寻址才查询出所需数据,第二张图用了一个简单的 平衡二叉树索引 之后我们只用了3次,这还是数据量小的情况下,数据量大了效果更明显,所以总结来说 创建索引就是为了加快数据查找速度;

主要种类

(1)索引结构上主要分为聚簇索引和非聚簇索引,聚簇索引是指索引的结构和排列规则是和实际数据的存储结构和排列规则是一样的(比如说书本的目录和内容就相当于聚簇索引,书本的内容顺序总是和目录顺序一样的),每个表至多只能创建一个聚簇索引,下图为聚簇索引的一种结构表示;
在这里插入图片描述

(2)非聚簇索引则可能是通过其他算法规则构成的一种索引结构,索引的结构和实际数据存储的结构是不同的,比如说这张图中的索引类型就属于非聚簇索引;
在这里插入图片描述

索引按数据库功能分类

(1)唯一索引

概念:唯一索引限制了在表对应的唯一索引列上的值是唯一不可重复的;

特点:

  1. 一个表可以创建多个唯一索引;

  2. 唯一索引的值允许为null;

  3. 允许多个列建立组合唯一索引;

(2)主键索引

概念:主键索引属于唯一索引的一个特殊种类,一个表的某列创建了主键索引后会具备唯一索引的功能同时还会对该列生成主键约束,所以简单来说主键索引是一种带有主键约束的唯一索引;

特点:

  1. 数据库在创建主键同时会自动建立一个唯一索引。

  2. 每个表最多只能创建一个主键索引;

  3. 创建了主键索引的列不允许有重复的值,并且不能为null值;

  4. 创建了主键索引的列可以作为外键;

(3)聚集索引

概念:聚集索引属于聚簇索引的一个种类,在mysql中InnoDB数据引擎模式主索引就是使用的聚集索引,聚集索引的索引结构中就包含了表的数据;

特点:

  1. 一个表只能创建一个聚集索引;

  2. 聚集索引尽量建在不会经常发生变动的列上,因为一旦列变动同时也会引索引结构变化,而索引结构中也包含者数据的变动;

  3. 数据库在创建主键时如果这个表之前没有聚集索引,同时建立主键时候没有强制指定使用非聚集索引,则建立主键时候,同时建立一个唯一的聚集索引

什么时候不要用索引,什么时候要用索引

(1)什么场景不要用索引:

  1. 数据更新性能比查询性能要求要高的情况下不要使用索引,因为数据的更新的同时索引也要进行维护和更新(加了索引查询快但更新就会慢);

  2. 不要盲目的给表建太多索引,因为索引本身的存储也要占用存储空间,一旦更新操作频繁反而降低新性能;

  3. 不要给 不经常使用的列建索引,不怎么查询还建索引干嘛;

  4. 不要给 高重复值的列建索引,索引本身就是为了提高查询速度,然而数据值高度重复,数据区别性不高,索引起不了效果)(比如说:性别);

  5. 不要给img,tex.bit数据类型使用索引,因为这种字段一般使用很少,数据量太大;

(2)什么场景用索引

  1. 经常要用于查询的列 where id=?;

  2. 经常要用于排序(order by),分组(group by)的列,因为索引已经排好序了;

  3. 有值唯一性限制的列,比如说主键、用户名;

索引在Mysql的使用方式

(1)在Mysql中索引是基于B+树(请看推荐资料)的数据结构实现的;

(2)MyISAM数据引擎,表索引文件和数据文件是分离开的,主索引和辅助索引一样,只是有主键的区别,主索引的键不能重复;InnoDB中表索引本身就是表数据文件,索引节点中存的是表的数据而不是数据引用地址,辅索引完全依赖于主索引,辅索引的每次查找都是找到对应主索引的节点再找到数据;

(3)InnoDB中必须要有一个聚集索引,而聚集索引在基于主键创建的,所以InnoDB的表必须要有主键,如果没有显示指定主键,Mysql会自动创建一个隐式主键;

(4)InnoDB除了主索引(聚集索引)之外的索引都是以辅助索引的形式存在,辅助索引每次检索的时候是通过找到主索引再找到数据;

索引优化

(1) 尽量选择惟一性索引;

(2) 为经常需要 排序、分组和联合操作的字段建立索引;

(3) 为经常作为查询条件的字段建立索引;

(4) 限制索引的数目,索引越多,更新和插入的效率越低;

(5) 尽量使用数据量少的索引;

(6) 组合索引中的尽量把能过滤掉更多数据的字段放在前面;

(7) 尽量使用前缀来索引,针对长文本,TEXT等类型;

(8) 删除不再使用或者很少使用的索引;

(9) 数据是动态变化中的,索引的使用也需要根据数据的变化而变化。

链接:https://www.jianshu.com/p/97667bb5de25

推荐资料

磁盘和主存数据读取原理:http://blog.csdn.net/abcd1101/article/details/55281514

平衡二叉树、B树、B+树:https://zhuanlan.zhihu.com/p/27700617

MySQL索引背后的数据结构及算法原理:https://link.zhihu.com/?target=http://blog.codinglabs.org/articles/theory-of-mysql-index.html

叉树、B树、B+树:https://zhuanlan.zhihu.com/p/27700617

MySQL索引背后的数据结构及算法原理:https://link.zhihu.com/?target=http://blog.codinglabs.org/articles/theory-of-mysql-index.html

数据库索引背后的数据结:https://www.cnblogs.com/songwenjie/p/9414960.html

已标记关键词 清除标记
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰(刘运强)老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能的MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。</span> </p>
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页