MySQL索引定义:索引(Index) 是帮助MySQL高效获取数据的数据结构。 提取句子主干, 就可以得到索引的本质: 索引是数据结构。
大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构

数据结构具体应用场景:

数据库是如何做到快速检索的功能。
特别有意思的小例子。

mysql索引原理的理解和数据结构

数据结构

B+树(为什么使用B+数)

  • 所有数据都存储在磁盘中,读取数据由于IO问题会读取慢,如何加快IO速度

IO

  1. 量:减少IO量
    *禁止使用slect ,避免增加不必要的量
  2. 次数:减少IO次数

相关知识点

  • 加入索引(加快查询速度)
  • 数据结构设计:key、文件编号、当前文件的offset(存在问题:当数据量特别大时,索引所占用的存储空间也特别大。)
  • 解决方法:索引的数据文件也需要持久化存储到磁盘中,当需要使用时直接读取到内存中,加快数据的访问(分而治之:分块读取)
  • 操作系统基本概念:
    1.局部性原理:数据和程序都有聚集成群的倾向,之前被查询过的数据很快会再次被查询。冷热数据(一级缓存,二级缓存的意思)
    2.磁盘预读:在数据交换时,会有一个基本逻辑单位页,一般占用空间是4k,每次在进行数据获取时可以获取整页的整数倍。(mysql中innodb的存储引擎读取数据会读取16k show variables like ‘%innodb’)

ket-value格式数据结构存储:

  1. 哈希表
  2. 树(二叉树、BST、AVL、红黑树、B树、B+树)
    二分支的缺点:深度太深,解决方法:B树(多叉树)

B树

  • 搜索树
  • 多节点多分支的数

    问题:假设磁盘块存放16条数据,如果是三层树,最多存放的数据:161616=4096,即48k才存放4096条数据

B数存在问题:存放了数据,依然占用空间,如何减少数据,需要用到B+数

B+树

  • 最下面的叶子节点存放的是顺序全量数据
  • 非叶子节点可以不用存放data
  • 问题:读取数据,假设三层树48k磁盘块,1000字节为1kb,指针和键值占10字节,1行记录1k 161000/10=160016001600=40960000的数据范围,即Key键值,最下面的只存放一遍数据*
  • 建索引时,key要尽可能少的占用空间

索引技术名词

**回表:**从非聚簇索引跳转到聚簇索引中查找数据的过程(避免回表操作select * from table )
索引覆盖当非聚簇索引的叶子节点中包含了查询需要的所有字段时,不需要回表的过程(推荐使用select id,name from table )
最左匹配:、索引下推

数据库中的基本数据结构相关推荐

  1. B+树:MySQL数据库中建立索引的数据结构

    在MySQL数据库中是通过B+树的数据结构建立索引的. 相比二叉树,B树是一种多叉树,总层数更少,磁盘io次数也会相应减少.而与B树不同的是,B+树把索引和数据分开存储,数据以链表的形式存放在B+树的 ...

  2. wordPress数据结构 数据库中的表、字段、类型及说明

    wordPress数据结构 数据库中的表.字段.类型及说明 WordPress数据库中的表.字段.类型及说明 wp_categories: 用于保存分类相关信息的表.包括了5个字段,分别是: wp_c ...

  3. C#中读取数据库中Image数据

    作者:未知 请与本人联系 DataReader 的默认行为是在整个数据行可用时立即以行的形式加载传入数据.但是,对于二进制大对象 (BLOB) 则需要进行不同的处理,因为它们可能包含数十亿字节的数据, ...

  4. 谈谈对数据库中ACID、CAP、BASE的认识

    2019独角兽企业重金招聘Python工程师标准>>> ACID.CAP.BASE的区别与联系 这得从关系型数据库关系型数据库(RDBMS)和非关系型数据库(NoSQL)说起. RD ...

  5. 在MySQL数据库中,这4种方式可以避免重复的插入数据!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:小小猿爱嘻嘻 wukong.com/question/674 ...

  6. mysql数据库三级分类_5.在 MySQL数据库中,以下数据库对象与数据库三级模式对应关系正确的是?...

    展开全部 一.数据库系统的三636f707962616964757a686964616f31333433616139级模式:外模式.模式.内模式. 1.模式(逻辑模式.概念模式):实际上是数据库数据在 ...

  7. 数据库中死锁那些事儿

    转自:http://blog.csdn.net/eseaqyq/article/details/7795023 -------------------------------------------- ...

  8. 从职责归属看数据库中关系设计

    今天和领导讨论组织结构中的职责归属的时候,讨论到TMT(技术委员会)和CTT(公共技术小组)中(TMT是CTT的上层组织),如果有大的攻关技术任务,是将职责归属到CTT好呢,还是将职责归属到TMT好. ...

  9. mysql支持非关系_说下oracle、mysql、非关系型数据库中的索引结构?

    谢邀~~树懒君悉心整理了一篇索引结构方面的内容,跟各位知友分享分享~ Oracle 索引的数据结构:B-TreeOracle 数据库使用 B-trees 存储索引,来加速数据访问.若没有索引,你必须顺 ...

  10. sqlbulkcopy mysql_c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中

    今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...

最新文章

  1. 修复mysql编码错乱的数据_关于MySQL数据库编码修复相关问题
  2. 如何在html 中引入其它html文件
  3. Linux系统安装Appach 2.4.6
  4. ArcGIS学习路线
  5. R 指定安装镜像的方法
  6. hmcl手机版下载_【HMCL启动器下载】HMCL我的世界启动器电脑版 v3.2.144 最新版-开心电玩...
  7. Linux线程优先级设置
  8. putty安装和使用
  9. WinCE 5.0下的鼠标键盘驱动分析
  10. Application.DoEvents()
  11. ubuntu 16.04 插入耳机没有声音
  12. Cesium中的地球坐标系转换:岁差章动计算(XYs)
  13. 正则表达式lookahead and lookbehind zero-length assertions
  14. 基于Python的指数基金量化投资——指数基金估值榜
  15. python股票量化交易(4)---金叉与死叉
  16. kubernetes Pod驱逐机制
  17. 华为平板M3能用鸿蒙吗,华为平板M3怎么样 麒麟950处理器搭配快充只要1888!
  18. MATLAB | 如何使用MATLAB绘制雷达图(蜘蛛图)
  19. 淘宝客高级接口 阿里妈妈高级接口调用示例 淘宝客高佣转链接口 淘宝客订单接口...
  20. 有几万块钱做什么生意合适?小本生意介绍

热门文章

  1. 人行发布2018年度银行科技发展获奖名单
  2. 静态网页连接mysql数据库_静态网页可以联接sql数据库吗?代码怎么写?
  3. 结构体定义LNode,*LinkList和typedef struct
  4. [嵌入式linux]PCIe 热拔插(rescan)
  5. OpenG数组讲解之Filter 1D Array。
  6. Linux版phpstudy搭建
  7. 安卓flash插件_谷歌Chrome 76稳定版正式发布:默认禁用Flash
  8. 软件测试背景目的要点概述
  9. Hello World with Ant
  10. 分数加减乘除混合运算带答案_给我出50道分数加减乘除四则混合运算题(只需题目不需答案)...