BTree

我用对了这些场景下的索引,技术总监夸我棒

狂风中的少年 提交于 2020-11-26 09:02:35
前言 生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题 添加的索引是越多越好吗 为啥有时候明明添加了索引却不生效 索引有哪些类型 如何评判一个索引设计的好坏 看了本文相信你会对索引的原理有更清晰的认识。本文将会从以下几个方面来讲述索引的相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。 什么是索引,索引的作用 索引的种类 高性能索引策略 索引设计准则:三星索引 什么是索引,索引的作用 当我们要在新华字典里查某个字(如「先」)具体含义的时候,通常都会拿起一本新华字典来查,你可以先从头到尾查询每一页是否有「先」这个字,这样做(对应数据库中的全表扫描)确实能找到,但效率无疑是非常低下的,更高效的方相信大家也都知道,就是在首页的索引里先查找「先」对应的页数,然后直接跳到相应的页面查找,这样查询时候大大减少了,可以为是 O(1)。 数据库中的索引也是类似的,通过索引定位到要读取的页,大大减少了需要扫描的行数,能极大的提升效率,简而言之,索引主要有以下几个作用 即上述所说,索引能极大地减少扫描行数 索引可以帮助服务器避免排序和临时表 索引可以将随机 IO 变成顺序 IO 第一点上文已经解释了,我们来看下第二点和第三点 先来看第二点,假设我们不用索引,试想运行如下语句 SELECT *

我用对了这些场景下的索引,技术总监夸我棒

自作多情 提交于 2020-11-26 04:15:52
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 前言 生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题 添加的索引是越多越好吗 为啥有时候明明添加了索引却不生效 索引有哪些类型 如何评判一个索引设计的好坏 看了本文相信你会对索引的原理有更清晰的认识。本文将会从以下几个方面来讲述索引的相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。 什么是索引,索引的作用 索引的种类 高性能索引策略 索引设计准则:三星索引 什么是索引,索引的作用 当我们要在新华字典里查某个字(如「先」)具体含义的时候,通常都会拿起一本新华字典来查,你可以先从头到尾查询每一页是否有「先」这个字,这样做(对应数据库中的全表扫描)确实能找到,但效率无疑是非常低下的,更高效的方相信大家也都知道,就是在首页的索引里先查找「先」对应的页数,然后直接跳到相应的页面查找,这样查询时候大大减少了,可以为是 O(1)。 数据库中的索引也是类似的,通过索引定位到要读取的页,大大减少了需要扫描的行数,能极大的提升效率,简而言之,索引主要有以下几个作用 即上述所说,索引能极大地减少扫描行数 索引可以帮助服务器避免排序和临时表 索引可以将随机 IO 变成顺序 IO 第一点上文已经解释了,我们来看下第二点和第三点

我用对了这些场景下的索引,技术总监夸我棒

生来就可爱ヽ(ⅴ<●) 提交于 2020-11-25 07:54:43
前言 生产上为了高效地查询数据库中的数据,我们常常会给表中的字段添加索引,大家是否有考虑过如何添加索引才能使索引更高效,考虑如下问题 添加的索引是越多越好吗 为啥有时候明明添加了索引却不生效 索引有哪些类型 如何评判一个索引设计的好坏 看了本文相信你会对索引的原理有更清晰的认识。本文将会从以下几个方面来讲述索引的相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。 什么是索引,索引的作用 索引的种类 高性能索引策略 索引设计准则:三星索引 什么是索引,索引的作用 当我们要在新华字典里查某个字(如「先」)具体含义的时候,通常都会拿起一本新华字典来查,你可以先从头到尾查询每一页是否有「先」这个字,这样做(对应数据库中的全表扫描)确实能找到,但效率无疑是非常低下的,更高效的方相信大家也都知道,就是在首页的索引里先查找「先」对应的页数,然后直接跳到相应的页面查找,这样查询时候大大减少了,可以为是 O(1)。 数据库中的索引也是类似的,通过索引定位到要读取的页,大大减少了需要扫描的行数,能极大的提升效率,简而言之,索引主要有以下几个作用 即上述所说,索引能极大地减少扫描行数 索引可以帮助服务器避免排序和临时表 索引可以将随机 IO 变成顺序 IO 第一点上文已经解释了,我们来看下第二点和第三点 先来看第二点,假设我们不用索引,试想运行如下语句 SELECT *

b-树图文详解

被刻印的时光 ゝ 提交于 2020-11-25 05:54:50
转载自 玻璃猫 程序员小灰 本文提到的「B-树」,就是「B树」,都是 B-tree 的翻译,里面不是减号-,是连接符-。因为有人把 B-tree 翻成 「B-树」,让人以为「B树」和「B-树」是两种树,实际上两者就是同一种树。 ———————————— ———————————— 二叉查找树的结构: 第1次磁盘IO: 第2次磁盘IO: 第3次磁盘IO: 第4次磁盘IO: 下面来具体介绍一下B-树(Balance Tree),一个m阶的B树具有如下几个特征: 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m 4.所有的叶子结点都位于同一层。 5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。 第1次磁盘IO: 在内存中定位(和9比较): 第2次磁盘IO: 在内存中定位(和2,6比较): 第3次磁盘IO: 在内存中定位(和3,5比较): 自顶向下查找4的节点位置,发现4应当插入到节点元素3,5之间。 节点3,5已经是两元素节点,无法再增加。父亲节点 2, 6 也是两元素节点,也无法再增加。根节点9是单元素节点,可以升级为两元素节点。于是拆分节点3,5与节点2,6,让根节点9升级为两元素节点4,9

MySql速查手册

安稳与你 提交于 2020-11-24 15:56:23
索引 索引类型 索引注意事项 事务隔离级别 read uncommitted 未提交读 read committed 提交读 repeatable 重复读 Serializable可串行化 隔离界别查询 数据库锁 数据类型 INT varchar 时间类型 Java对应Mysql类型 常用函数 常用Sql 存储引擎 InnoDB MyISAM 知识点 最左匹配原则 =和in可以乱序 单表 尽量not null 业务常见问题 特殊字符插入问题 toc 索引 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B树的形式保存。就像是数据的目录。 索引类型 唯一索引 主键索引 B-Tree 普通索引 R-Tree 联合索引 Hash 全文索引 FullText 在mysql中fulltext索引只针对myisam生效。 复合索引 对于创建的多列索引(复合索引),不是使用第一部分就不会使用索引。 对于like查询前面%通配符不会使用索引,通配符在后面会使用索引。 使用or要求所有字段都必须有索引,否则不会使用索引。 索引注意事项 #避免使用双%号的查询条件。 如a like '%123%',(如果无前置%,只有后置%,是可以用到列上的索引的) 事务隔离级别 read uncommitted 未提交读 所有事务都可以看到没有提交事务的数据。是所有隔离级别中最低的一种,会出现脏读。

3年部署3000套PG实例的架构设计与踩坑经验

喜你入骨 提交于 2020-11-24 08:28:13
作者介绍 陈华军, 苏宁易购架构专家,负责数据库产品的相关设计工作,十年以上数据库相关工作经验。PostgreSQL中文社区核心组成员,主要负责PostgreSQL中文手册翻译项目的维护。 PostgreSQL作为一款许可开放,功能齐备的开源关系数据库,在当前提倡自主可控的大背景下,正受到越来越多企业的重视。 苏宁从2017年开始引入PostgreSQL,到2019年双11前3年间已上线3000多PostgreSQL实例,运行在我司各个不同的业务线。我们用PostgreSQL替换掉大量的商业数据库,不仅为公司节省了很多成本,而且通过灵活运用PostgreSQL的特色功能,甚至大大提升了业务的使用体验。 本次分享主要介绍苏宁引入PostgreSQL的背景和历程,以及我们在实际使用PostgreSQL中积累的一些经验。 一、背景 早期苏宁的数据库全部采用商业数据库。2013年,我们引入了MySQL。到了2016年,MySQL已经被大量使用,但是,核心业务仍然依靠商业数据库承载。当时我们意识到继续依赖国外商业数据库,除了每年需要支付高昂的许可和维保成本,对我们提升自身的数据库运维水平更好地支撑业务发展也存在诸多的弊端。因此我们在2016年启动了去商业数据库的调研工作,并于2017年开始逐步推进。 通过摸底现有业务数据库的使用情况

外键的约束(Mysql、PostgreSQL)

梦想与她 提交于 2020-11-15 13:01:23
关于外键是什么,具体不再详述,可以自行百度。 讲一下关于外键的 On Delete和On Update的使用 最近在项目的表中看到这些,不懂顺便查了查: ONSTRAINT "c_clusters_pkey" PRIMARY KEY ("cluster_id"), CONSTRAINT "c_clusters_zabbix_group_id_fkey" FOREIGN KEY ("zabbix_group_id") REFERENCES "public"."groups" ("groupid") ON DELETE NO ACTION ON UPDATE NO ACTION ALTER TABLE "public"."c_clusters" OWNER TO "postgres"; CREATE UNIQUE INDEX "clusters_cluster_id_key" ON "public"."c_clusters" USING btree (cluster_id);   其中关于 ON DELETE NO ACTION ON UPDATE NO ACTION On Delete和On Update都有Restrict,No Action, Cascade,Set Null属性。现在分别对他们的属性含义做个解释。 ON DELETE restrict(约束):当在父表

PostgreSQL中enable、disable和validate外键约束

守給你的承諾、 提交于 2020-11-15 11:40:53
postgres=# create table t1(a int primary key,b text,c date); CREATE TABLE postgres=# create table t2(a int primary key,b int references t1(a),c text); CREATE TABLE postgres=# insert into t1 (a,b,c) values(1,'aa',now()); INSERT 0 1 postgres=# insert into t1 (a,b,c) values(2,'bb',now()); INSERT 0 1 postgres=# insert into t2 (a,b,c) values (1,1,'aa'); INSERT 0 1 postgres=# insert into t2 (a,b,c) values (2,2,'aa'); INSERT 0 1 postgres=# \d t1 Table "public.t1" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | not null | b | text | |

【数据结构】二叉树的创建、遍历以及广度深度优先搜索的实现

喜欢而已 提交于 2020-11-12 08:29:29
先序、中序、后序遍历主要依靠递归来实现 广度优先搜索主要依靠队列(先进先出),深度优先依靠栈(先进后出) #include<iostream> using namespace std; template < class T> struct Node { T data; Node <T> * next; }; template < class T> class LinkStack { private : Node <T> * top; public : LinkStack(); ~ LinkStack(); void Push(T x); T Pop(); T Top(); bool Empty(); }; template < class T> LinkStack <T> ::LinkStack() { top = NULL; } template < class T> LinkStack <T>::~ LinkStack() { Node <T> *p = top; while (p) { Node <T> *q = p; p = p-> next; delete q; } top = NULL; } template < class T> void LinkStack<T> ::Push(T x) { Node <T> *s = new Node<T> (); s ->data

玩转Mysql系列

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