索引学习以及索引原理

有时候,建索引并不一定会加快查询效率。但是,有时候,表的数据量是大数据量的话,还是要看下是否能使用索引优化查询效率。

1、建索引的几大原则:

1.1、最左前缀匹配原则非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a =1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

1.2、=和in可以乱序比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。

1.3、尽量选择区分度高的列作为索引区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录。

1.4、索引列不能参与计算,保持列“干净”比如from_unixtime (create_time)= 2014-05-29’就不能使用到索引,原因很简单,b+ 树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

1.5、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

2、索引原理

索引是一种数据结构,它通过特定的规则和算法,将数据与实际文件的位置关联起来,以加快数据的查找。索引节点包含实际文件的位置信息。在查找过程中,遵循索引的规则可以快速定位到对应数据的节点,从而实现快速查找数据的目的。索引这个概念在不同的技术领域中都有广泛的应用,例如在数据库中,它是一种常用的技术。在日常生活中,索引的概念也无处不在,如书本中的目录、座位号或考试编号等,它们都具备类似索引的功能。简而言之,所有通过特定规则数据结构和实际目标关联,并根据特定规则算法快速寻址的功能都可以称为索引。

比如说,

a、要在一栋楼里找1205号的出租屋,

那就先让指针先指向12楼,已经锁定12楼后,再在12楼里面找到05号房间。

b、或者要找东朝向的12楼偏中间的房子,

那就让指针先指向东朝向的所有房子,相当于现实生活中,找房子的人,站在该栋楼的东面看东朝向的房子,而不用关心西朝向、北朝向、南朝向的房子。站在东面看东朝向的房子,然后指针跳到12楼,再在12楼找偏中间的房子。

更多内容请参考:索引的原理-CSDN博客

这篇文章写得挺好的。

学习笔记:

二分查找算法关键步骤就是找到区间的中间值,然后确定要查找的值落在左区间还是右区间,一直重复这个步骤直到找到该值。于是就可以将这种查询方法映射成一种数据结构——树。我们规定一种树,有左节点,右节点,和当前节点。并且左节点 < 当前节点 < 右节点 . 如下图所示:

由于树具有方便快速查找的特性,我们一般都会使用树结构去存储索引,并对简单的查找二叉树做了很多优化,比如 红黑树,平衡二叉树, B 树 B+树

树的构建,删除, 查找都有一定的算法,这里不详细描述,只需知道树有一个通用的特性:树的高度越低,查找效率越高

所以索引的构建 , 本质上是控制树的高度

索引有如下数据结构:

a、二叉树

b、红黑树

c、Hash表

d、B Tree和B+ Tree

简单的二叉树,顺序插入数据,导致树的深度会越来越高,影响查询效率。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值