什么是数据库索引?

通俗来说,索引就像一本书的目录,根据目录可以快速的定位到要找的内容的所在的页码。

MySQL官方对于索引的定义:索引(Index)是帮助MySQL高效获取数据的一种数据结构,而且是排好序的数据结构,索引存储在磁盘文件里面。

索引的两种数据结构:B+Tree索引和Hash索引(B+树平衡、排序)(Hash)

        #通过Hash计算出来肯定比一个个找效率要高

        #平常说的索引如果没有特别的说明,一半都是指B+Tree索引,索引能够减少存储引擎需要扫描的数据量从而提高数据的检索速度。

索引的相关:表中的数据行很多通常以某种结构保存在计算机的硬盘上,而不能全部载入内存,所以如何快速的找到我们关心的那些数据行呢?类比新华字典查汉字,我们怎么快速的查字典?怎么快速翻到图书的那一章节?

索引的作用:快速的定位我们的想要的内容在数据库中存储的位置。那么有目的的操作就会少一些,IO操作就会少一些,如果可以快速的定位数据的存储位置,就不需要一块一块的往内存调。

例如:对于

这样一个查询,如果没有建立对于性别的索引,那么数据库系统查询的时候就是进行全盘扫描。如果建立了聚簇索引,查询的效率就会提高(从执行计划里可以看出来)。 

 

索引键值的有序性:为了快速查找,索引键值应该是有序的。

机器学习中的索引:以汉语拼音进行排序,dddddd都是d开头的。

 

逻辑上来讲,索引数据包含两个部分:

1.索引键值        2.对应的指针或者存储位置。

        #表中的数据是没有顺序的,但是我们建立的索引需要排序,因为排好了序所以进行查询的时候就比较方便了。

 

索引的类型:

        1.普通索引:Normal,表示普通索引大多数情况下都可以使用。

        2.唯一索引:Unique,表示唯一的不允许充份股的索引,如果该字段信息不能重复,例如注册手机号用作索引的时候,可以设置为unique。(唯一值索引和唯一值约束的效果是一样的,但是他们的目的是不一样的)

        Primary Key是拥有自定义的Unique约束;也就是说,主键是不允许重复的。

        3.全文索引用的不多

        4.空间索引:空间索引是对地理空间位置数据类型的字段建立的索引,MySQL种的地理空间位置数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。

设置索引:

        可以直接对某个字段进行添加索引,可以设置索引的方式:

(字段和属性有什么区别?):字段、属性都是对列的称呼,字段是从数据库的角度的名字,而属性是从面向对象的角度的名字。属性和字段是对同一个元素的不同的称呼。在关系代数中成尸体的特性为属性,在关系模型种称实体的特性为字段。

1.

2.利用SQL语句。

(1)使用普通索引

ALTER TABLE "mybatis"."users" ADD INDEX "idx_account"("account") USING BTREE;

(2)唯一索引

ALTER TABLE "mybatis"."users" ADD UNIQUE INDEX "uniq_account"("account") USING BTREE;

聚簇索引和非聚簇索引:

        1.聚簇索引:对表中的数据进行排序,需要和索引的顺序有一定的对应。在进行一些范围查询的时候是非常方便的,例如对某个学院的学生进行存放的时候,学生相邻的话查询的效率就比较高。如果建立的非聚簇索引,学生存放的比较分散,可能需要调更多的块才能访问到所有的学生。

        2.非聚簇索引

单列索引和复合索引:也就是在A列,和ABC三列上建索引的区别。

那些列适合建立索引?

        1.取值不允许重复的列

        系统会为主键和唯一键自动创建唯一值索引。

        2.更新频率要低:因为更新完表中,也需要对索引表进行更新,这样可能会导致索引表里面的顺序发生改变。

        3.经常用作查询条件、连接条件或者需要排序的列。(例如学生姓名、所在院系等)例如,连接效率是比较低下的,我们可以在索引上判断是不是满足连接条件相等(等值连接)。

        4.(1)在取值重复率很高的列上(2)经常作范围查询,则适合创建聚簇索引(一张表最多一个);在取值重复率较低的列上适合创建非聚簇索引。

        5.复合索引中应该将使用频率高的列放在前面(例如:ABC),列就是attribute。

索引的缺点:

        1.索引需要保存,也就是说需要空间消耗。

        2.当表中的数据发生改变,需要对索引表进行维护。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值