数据库索引-索引原理
什么是索引?
数据库索引是数据库中一块单独的,物理的数据结构,可以对一列或多列创建索引,那么索引中保存的就这些咧的值以及其所对应的数据行指针,指针指向的是表中某条数据的位置。
索引有自己的数据结构,来对数据进行排序,常用的数据结构有:二叉树、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,然后条件之一不是索引列
数据库索引-索引原理相关推荐
- 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则
MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...
- mysql的数据库的索引_MySQL 数据库索引原理与分类
前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...
- [数据库] 一文读懂Mysql数据库索引实现原理
咱们用了这么久Mysql数据库做项目,你知道数据是怎么存在数据库里吗?他们是如何存储的吗? 今天咱们就来扒一扒Mysql数据库索引的底层实现,Mysql数据库的索引是由都是由B+树实现的,那为什么不是 ...
- 关于事物型数据库的索引原理
1.二分查找算法 二分查找法的时间复杂度为Ο(log2n).大家如果有兴趣可以去验证一下这个结果,这里我就不做解释了. 我们具体来感受一下二分查找法有多强大,假设:集合里面有40亿个元素,排序方式为从 ...
- 数据库索引的原理到底是什么?
引言 中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是 ...
- 数据库索引的原理到底是什么?-转
中小企业MIS系统的管理基本上由两大部份组成,一是前台的可视化操作,二是后台的数据库管理.网管对前台的管理和维护工作包括保障网络链路通畅.处理MIS终端的突发事件以及对操作员的管理.培训等,这是网管们 ...
- mysql数据库索引实现原理
1. B-树 在介绍索引实现之前,我们先来了解下几种树的数据结构. 二叉搜索树 二叉搜索树有以下性质 1.每个节点有一个关键字 2.左右孩子至多有一个. 3.关键字大于左孩子,小于右孩子. 正因为二叉 ...
- 数据库索引优化原理,索引的工作机制
我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引.假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name.Employee_Age 和Emp ...
- PHP面试MySQL数据库的索引
你好,是我琉忆,PHP程序员面试笔试系列图书的作者. 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识 周三:PHP面试MySQL数据库的索引 周五 ...
- mysql学习【第10篇】:数据库之索引与慢查询优化
mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...
最新文章
- 简书 java jvm_JVM介绍
- Tomcat7 配置 ssl
- 进程间通信——DLL共享节
- SD-销售订单中装运点确认
- c primer plus 第6版 中文版pdf_一种2-C聚酯修补填充剂
- 一周要回审9000万条视频,内容审核师能被AI拯救吗?
- ●BZOJ 4556 [Tjoi2016Heoi2016]字符串
- python---django中权限框架设计
- apollo 配置中心_apollo-1:apollo配置中心单机模拟分布式部署
- 《Non-invasive Fetal ECG Signal Quality Assessment for Multichannel Heart Rate Estimation》论文解读-废弃
- 迷宫城堡(HDU-1269)
- android如何兴起_情感设计的必要兴起
- 吴恩达机器学习编程题ex1上 单变量线性回归: (python版含题目要求、代码、注解)
- Lottie动画的使用
- 在线词云图生成(以WordArt为例)
- java 百度网盘上传_[Java教程]使用pcs api往免费的百度网盘上传下载文件
- 川藏北线-成都老茶馆叹茶
- 京区航天研究所 哪些比较好的研究所?
- 大数据系列 之 学习准备
- mysql libmysqlclient_libmysqlclient.a无处可寻
热门文章
- ctf-ichunqiu-misc
- grib1/2格式数据解析
- 多级队列调度算法可视化界面_模拟多级反馈队列调度算法原理(源程序c++)
- 大数据面试(一):Hive面试题
- 【预测模型-ELM分类】基于极限学习机ELM+OSELM+KELM+半监督SSELM+USELM实现数据集分类附matlab代码
- spring 官方文档 pdf 版下载方法
- GD32系列单片机EXTI外部中断配置
- js面试题(持续更新)
- 【JVM】G1垃圾收集器知多少
- html中如何使图片自动旋转90度,css实现图片旋转90度的方法