BTree

MySQL确定了SQL问题并采取相应的优化措施

与世无争的帅哥 提交于 2020-04-24 10:03:23
打卡(2020-04-23) 确定了问题并采取相应的优化措施 一般的情况下采取的建立索引来解决检索问题 B-Tree索引:使我们最常见的索引类型,大部分引擎都支持 Hash索引:只有memory引擎上支持(主要是建立在Memory/Heap) R-Tree:空间索引 主要使用在地理位置使用 Full-text:全文索引,myisam引擎使用 索引 MyISAM引擎 InnoDB引擎 Memory引擎 B-Tree索引 支持 支持 支持 Hash索引 不支持 不支持 支持 R-Tree索引 支持 不支持 不支持 Full-text索引 支持 不支持 不支持 Hash注意点: 只有Memory/Heap引擎支持hash索引 hash适合k-v的查询 hash查询比B-tree更快 hash不支持范围查询例如:<,>,<=,>= hash只有在使用"="才会使用索引列 来源: oschina 链接: https://my.oschina.net/u/4274555/blog/3652047

Mysql优化 B+Tree索引和Hash索引

半城伤御伤魂 提交于 2020-04-24 07:32:55
B+Tree索引   B+Tree和普通的B-Tree不大一样。有个网站可以体验这些数据结构: https://www.cs.usfca.edu/~galles/visualization/Algorithms.html   先看一下B-Tree      设定最大深度为3,插入10个数字,数据结构如上,他与普通的二叉树区别在于每个节点有多个数据,相当于横向扩展,减少深度。   为什么要减少深度:当数据量比较大的时候,mysql无法将索引全部加载到内存中,只能逐一加载磁盘页,每个磁盘页对应树的节点。造成大量磁盘IO操作(最坏情况下为树的高度)。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。所以,我们为了减少磁盘IO的次数,就你必须降低树的深度,将“瘦高”的树变得“矮胖”。   B树在这一点上已经比二叉树先进很多了,但对比B+树还是差了点,为了更好说明B+树,需要提到的是在Mysql中,B数的节点中都带有存储数据。   依然到网站中去体验一下B+树:      可以看到两个特点:     1.同样是三层数据,但是这里多了一层数据层,那是因为,B+树只有最后的叶子节点才会带有数据,其他的都是索引。     2.数据间带有一个指针   这些特点有什么用呢?   1.在Mysql的B树索引方式中,每个节点的存储容量是固定的,如果节点中存储了数据,意味着

大分区表高并发性能提升100倍?阿里云 RDS PostgreSQL 12 特性解读

一曲冷凌霜 提交于 2020-04-23 22:17:36
作者:凌策 世界上几乎最强大的开源数据库系统 PostgreSQL,于 2019 年 10 月 3 日发布了 12 版本,该版本已经在阿里云正式发布。PostgreSQL 12 在功能和性能上都有很大提升,如大分区表高并发性能提升百倍,B-tree 索引空间和性能优化,实现 SQL 2016 标准的 JSON 特性,支持多列 MCV(Most-Common-Value)统计,内联 CTE(Common table expressions)以及可插拔的表存储访问接口等。本文对部分特性进行解读。 分区表性能 PostgreSQL 对分区表的支持由来已久。在 10.0 之前,分区表需要用户通过继承的方式手动创建,从 10.0 开始支持声明式分区,即通过 SQL 直接创建分区表,改善了分区表的易用性;在 11 中,支持 HASH 分区,并在计划 来源: oschina 链接: https://my.oschina.net/u/4263893/blog/3471872

国产数据库存储引擎X-Engine的科研之路

喜你入骨 提交于 2020-04-23 04:58:20
X-Engine是阿里云RDS MySQL 的存储引擎之一,基于Log-structured Merge Tree (LSM-tree),较基于 B-tree 一族的其它存储引擎而言年轻很多,所以在实践中遇到问题也更多,对研究的需求也更大。 LSM-tree是1996 年美国计算机科学家 Patrick O'Neil 等人提出的一种数据结构,和 B-tree 相比,它拥有更快的写入性能和层次化的存储结构,能够同时利用好 DRAM 内存的高性能和持久化存储的高容量。尤其是 LSM-tree 的分层存储结构,可以天然地利用数据局部性将热数据和冷数据区别开,方便压缩算法有的放矢,有机会在降低整体成本的情况下,实现同样优秀的性能。但是,与几乎所有的计算机数据结构和系统设计一样,有得必有失。LSM-tree 难以避免的在读性能、I/O 写放大和空间效率上面对挑战。 01、写路径上的罗生门 首先,LSM-tree 使用了能够支持快速写入的 copy-on-write (CoW)方式来存储新增数据。顾名思义,假如要使用 CoW 来更新一条记录,不需要定位存储引擎中该条记录的地址并将它读取出来,只需要直接将我要更新的内容(例如,key = 100, value = value +100)写入内存和日志(直接写磁盘)即可。 这样整个写入操作就像记日记一样

数据结构与算法->

こ雲淡風輕ζ 提交于 2020-04-22 06:27:01
查询算法一般有哪些? 暴力:遍历 for 二分:条件为有序; 哈希:最高效;o(1) 索引:搜索引擎, lucene,solr bfs&dfs:图论里面的遍历 平衡树: B+树; B-tree: 红黑树: 二叉搜索树: -------------------------------------------------------------------------------------------------- 二分法转化为数据结构就是二叉查找树 左节点<根节点<右节点 时间复杂度就是树的深度 二分 :logn---->2^x=n(树的高度)-->x=log2^n---------->logn AVL树: 平衡二叉树 (追求极致的平衡,理想状态) 红黑树 :底层的数据结构就是(特殊的二叉树)二叉查找树 数据结构的推算:链表(暴力)->二叉树->二叉查找树->特殊的二叉查找树(自平衡的二叉查找树) ---------------------------------------------------------------------------------------------------------------- 红黑树: 红黑树的性质 : 1.每个节点红色或者黑色; 2.不可能有连载一起的红色节点(黑色可以) 3.根节点都是黑色root,没有父节点的节点为根节点 4

深入浅出数据库索引原理

爷,独闯天下 提交于 2020-04-22 00:38:32
前段时间,公司一个新上线的网站出现页面响应速度缓慢的问题, 一位负责这个项目的但并不是搞技术的妹子找到我,让我想办法提升网站的访问速度 ,因为已经有很多用户来投诉了。我第一反应觉的是数据库上的问题,假装思索了一下,摆着一副深沉炫酷的模样说:“是不是数据库查询上出问题了, 给表加上索引吧”,然后妹子来了一句:“现在我们网站访问量太大,加索引有可能导致写入数据时性能下降,影响用户使用的”。当时我就楞了一下, 有种强行装逼被拆穿的感觉,在自己的专业领域居然被非专业的同学教育, 面子上真有点挂不住。 其实, 我说这个例子并不是为展现我们公司的同事们专业能力的强大、做的产品棒、安全性高、性能牛逼, 连非技术的同事也懂得技术上的细节。事实上我只是想说明,「数据库」和「数据库索引」这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是开发人员在行业内生存的必备技能,而整天和技术人员打交道的非技术人员们,由于耳濡目染久了,自然也就能讲个头头是道了。 使用索引很简单,只要能写创建表的语句,就肯定能写创建索引的语句,要知道这个世界上是不存在不会创建表的服务器端程序员的。然而, 会使用索引是一回事, 而深入理解索引原理又能恰到好处使用索引又是另一回事,这完全是两个天差地别的境界(我自己也还没有达到这层境界)。很大一部份程序员对索引的了解仅限于到“加索引能使查询变快

国产数据库存储引擎X-Engine的科研之路

旧城冷巷雨未停 提交于 2020-04-21 18:58:57
X-Engine是阿里云RDS MySQL 的存储引擎之一,基于Log-structured Merge Tree (LSM-tree),较基于 B-tree 一族的其它存储引擎而言年轻很多,所以在实践中遇到问题也更多,对研究的需求也更大。 LSM-tree是1996 年美国计算机科学家 Patrick O'Neil 等人提出的一种数据结构,和 B-tree 相比,它拥有更快的写入性能和层次化的存储结构,能够同时利用好 DRAM 内存的高性能和持久化存储的高容量。尤其是 LSM-tree 的分层存储结构,可以天然地利用数据局部性将热数据和冷数据区别开,方便压缩算法有的放矢,有机会在降低整体成本的情况下,实现同样优秀的性能。但是,与几乎所有的计算机数据结构和系统设计一样,有得必有失。LSM-tree 难以避免的在读性能、I/O 写放大和空间效率上面对挑战。 01、写路径上的罗生门 首先,LSM-tree 使用了能够支持快速写入的 copy-on-write (CoW)方式来存储新增数据。顾名思义,假如要使用 CoW 来更新一条记录,不需要定位存储引擎中该条记录的地址并将它读取出来,只需要直接将我要更新的内容(例如,key = 100, value = value +100)写入内存和日志(直接写磁盘)即可。 这样整个写入操作就像记日记一样

聊一聊 InnoDB 引擎中的索引类型

ε祈祈猫儿з 提交于 2020-04-18 12:32:03
索引对数据库有多重要,我想大家都已经知道了吧,关于索引可能大家会对它多少有一些误解, 首先索引是一种数据结构,并且索引不是越多越好 。合理的索引可以提高存储引擎对数据的查询效率。 形象一点来说呢,索引跟书本的目录一样,能否快速的查找到你需要的信息,取决于你设计的目录是否合理。 MySQL 数据库有很多种索引,每种存储引擎的索引都不太一样,这篇文章就介绍一下 InnoDB 引擎种的索引,在 InnoDB 引擎中有三种索引: B-Tree 索引 哈希索引 全文索引 B-Tree 索引 B-Tree 索引是 InnoDB 引擎的默认索引,如果我们没有特别指定索引,那么说的就是 B-Tree 索引。在 InnoDB 引擎中使用 B+树来实现 B-Tree 索引,关于 B+树的知识就百度吧,我也讲不清楚。 在 B-Tree 索引中又有 主键索引和普通索引 之分,分别来了解一下: 1、主键索引 主键索引也叫聚集索引, 是按照主键构建得一棵 B+树,只要建立了主键就会自动加上索引 ,主键索引得特点是: 叶子节点上存放着整张表得行记录数据,所以叶子节点也叫数据页 。 正是因为这个特点,对于主键的排序查找和范围查找速度非常快,因为索引上就有用户需要查询的数据,所以不会要回表查询,这样就加快了查询速度,关于什么是回表,普通索引的时候再聊一聊。 2、普通索引 普通索引也叫二级索引

Mysql高手系列

邮差的信 提交于 2020-04-18 07:38:23
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。 欢迎大家加我微信itsoku一起交流java、算法、数据库相关技术。 这是Mysql系列第22篇。 背景 使用mysql最多的就是查询,我们迫切的希望mysql能查询的更快一些,我们经常用到的查询有: 按照id查询唯一一条记录 按照某些个字段查询对应的记录 查找某个范围的所有记录(between and) 对查询出来的结果排序 mysql的索引的目的是使上面的各种查询能够更快。 预备知识 什么是索引? 上一篇中有详细的介绍,可以过去看一下: 什么是索引? 索引的本质: 通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 磁盘中数据的存取 以机械硬盘来说,先了解几个概念。 扇区 :磁盘存储的最小单位,扇区一般大小为512Byte。 磁盘块 :文件系统与磁盘交互的的最小单位(计算机系统读写磁盘的最小单位),一个磁盘块由连续几个(2^n)扇区组成,块一般大小一般为4KB。 磁盘读取数据 :磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为 寻道时间、旋转延迟、传输时间 三个部分,寻道时间指的是磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下;旋转延迟就是我们经常听说的磁盘转速

【从二叉树到红黑树】清晰理解红黑树的演变---红黑的含义

穿精又带淫゛_ 提交于 2020-04-18 04:40:25
网上关于红黑树的博文很多,但是多是上来即讲定义,未说其所以然,难以理解且无所营养,甚者示例图有误且概念模糊的比比即是; 由于最近在学习相关知识找到一篇较为透彻且深入剖析的博文特此转载修订 注:原文示例图中有所错误本文中已重新修正,并增加了红黑树相关部分更多内容 前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的,能搞清楚就怪了。 本文介绍红黑树,暂时不涉及任何代码,只是帮助你理解红黑树的演变来源,树结构中红黑色具体含义,保证你理解了过后,再去看什么旋转插入的东西,要清晰得多。换句话说,理解本文要描述的内容是从代码级理解红黑树的基础。 开始之前,我还是恳请你保持耐心,一步一步仔细看完,浮躁的话真的做不好任何事情。 正文 红黑树的起源,自然是二叉查找树了,这种树结构从根节点开始, 左子节点小于它,右子节点大于它 。每个节点都符合这个特性,所以易于查找,是一种很好的数据结构。但是它有一个问题,就是容易偏向某一侧,这样就像一个链表结构了,失去了树结构的优点,查找时间会变坏。 所以我们都希望树结构都是矮矮胖胖的,像这样: 而不是像这样: 在这种需求下,平衡树的概念就应运而生了。