什么是索引?

数据库索引是数据库中一块单独的,物理的数据结构,可以对一列或多列创建索引,那么索引中保存的就这些咧的值以及其所对应的数据行指针,指针指向的是表中某条数据的位置。

索引有自己的数据结构,来对数据进行排序,常用的数据结构有:二叉树、BTree、B+Tree,hash

索引为什么快?

索引类似于字典,如果对于拥有大量数据的表查询。

没有索引的时候会做全表扫描:也就是将数据一页页的查看,直到匹配到条件之后将此条数据放到返回结果集中,如果数据量大这种方式会特别慢。

创建了索引好似字典的音标,查询某条数据不需要将表中每条数据进行一遍查询,只需要对索引列进行遍历,找到符合条件的数据然后根据指针找到具体某条数据,在遍历索引的时候速度会非常快,因为索引有自己独特的数据结构。

创建索引相比于不创建索引有两个大的优势:

1.硬件方面:就是磁盘io,无索引时会对表中的每一条数据进行读取,数据量大会导致磁盘io时间过长,但是有索引时只需要对某些列进行读取,读取到符合筛选条件的数据后根据指针找到相应的数据,这可以大大减少磁盘io时间

2.软件方面:无索引时是在表中无规律的每一条的搜寻符合条件的数据,但是创建索引,会对索引列进行排序,在遍历索引的时候是有规律的进行查找,可以少走很多的弯路

Btree索引的数据结构和查询逻辑:

定义:

1.允许每个节点至少有2个元素。

2.每个节点的最多有M-1个元素

3.每个节点有k个子节点并且有k-1个元素

4.所有叶子节点都在于同一层

5.元素的排列大小是从左往右从小到大

6.元素的值会放在叶子节点上

优点:

相比二叉树,Btree的每个索引页都能存放更多的元素,虽然增加了每层元素的遍历成本,但是相较于io切换,内存中的遍历成本可以忽略不记。

插入数据:

会从树的最上层往下面查找,直到找到将要插入元素的位置,如果因为要插入这个元素会破坏树的规定,会一层层往上层推直到找到合适的地方插入进去。

删除数据:

删除某一个会破坏规定,比如一个节点12,有两个子节点,左边是11,右边是13,15,现在要删除11,那么这将破坏每个节点至少两个元素这一规则,那么寻找剩下节点的中位数,12,13,15的中位数是13,由13当节点,其余两个当叶子节点

索引失效

1.用not in 或者 not exit

2.对索引列使用了函数处理

3.对索引列使用了计算

4.对索引列使用左模糊查询

5.条件中使用or,然后条件之一不是索引列

数据库索引-索引原理相关推荐

  1. 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...

  2. mysql的数据库的索引_MySQL 数据库索引原理与分类

    前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...

  3. [数据库] 一文读懂Mysql数据库索引实现原理

    咱们用了这么久Mysql数据库做项目,你知道数据是怎么存在数据库里吗?他们是如何存储的吗? 今天咱们就来扒一扒Mysql数据库索引的底层实现,Mysql数据库的索引是由都是由B+树实现的,那为什么不是 ...

  4. 关于事物型数据库的索引原理

    1.二分查找算法 二分查找法的时间复杂度为Ο(log2n).大家如果有兴趣可以去验证一下这个结果,这里我就不做解释了. 我们具体来感受一下二分查找法有多强大,假设:集合里面有40亿个元素,排序方式为从 ...

  5. 数据库索引的原理到底是什么?

    引言 中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是 ...

  6. 数据库索引的原理到底是什么?-转

    中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是网管们 ...

  7. mysql数据库索引实现原理

    1. B-树 在介绍索引实现之前,我们先来了解下几种树的数据结构. 二叉搜索树 二叉搜索树有以下性质 1.每个节点有一个关键字 2.左右孩子至多有一个. 3.关键字大于左孩子,小于右孩子. 正因为二叉 ...

  8. 数据库索引优化原理,索引的工作机制

    我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引.假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name.Employee_Age 和Emp ...

  9. PHP面试MySQL数据库的索引

    你好,是我琉忆,PHP程序员面试笔试系列图书的作者. 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识 周三:PHP面试MySQL数据库的索引 周五 ...

  10. mysql学习【第10篇】:数据库之索引与慢查询优化

    mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...

最新文章

  1. 简书 java jvm_JVM介绍
  2. Tomcat7 配置 ssl
  3. 进程间通信——DLL共享节
  4. SD-销售订单中装运点确认
  5. c primer plus 第6版 中文版pdf_一种2-C聚酯修补填充剂
  6. 一周要回审9000万条视频,内容审核师能被AI拯救吗?
  7. ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
  8. python---django中权限框架设计
  9. apollo 配置中心_apollo-1:apollo配置中心单机模拟分布式部署
  10. 《Non-invasive Fetal ECG Signal Quality Assessment for Multichannel Heart Rate Estimation》论文解读-废弃
  11. 迷宫城堡(HDU-1269)
  12. android如何兴起_情感设计的必要兴起
  13. 吴恩达机器学习编程题ex1上 单变量线性回归: (python版含题目要求、代码、注解)
  14. Lottie动画的使用
  15. 在线词云图生成(以WordArt为例)
  16. java 百度网盘上传_[Java教程]使用pcs api往免费的百度网盘上传下载文件
  17. 川藏北线-成都老茶馆叹茶
  18. 京区航天研究所 哪些比较好的研究所?
  19. 大数据系列 之 学习准备
  20. mysql libmysqlclient_libmysqlclient.a无处可寻

热门文章

  1. ctf-ichunqiu-misc
  2. grib1/2格式数据解析
  3. 多级队列调度算法可视化界面_模拟多级反馈队列调度算法原理(源程序c++)
  4. 大数据面试(一):Hive面试题
  5. 【预测模型-ELM分类】基于极限学习机ELM+OSELM+KELM+半监督SSELM+USELM实现数据集分类附matlab代码
  6. spring 官方文档 pdf 版下载方法
  7. GD32系列单片机EXTI外部中断配置
  8. js面试题(持续更新)
  9. 【JVM】G1垃圾收集器知多少
  10. html中如何使图片自动旋转90度,css实现图片旋转90度的方法