BTree

MySQL 中你必须要懂的 MVCC

…衆ロ難τιáo~ 提交于 2020-08-06 10:02:51
前言 MySQL 是目前流行的开源数据库之一,各大公司都使用 MySQL 作为自家的关系型数据库,但是 MySQL 作为一个数据库而言,基本使用是非常简单的,只要会一点点建表语句(可以使用工具建表),一点点查询语句就可以使用 MySQL 来存储数据了。 这种没有灵魂的操作,对于很多初学者来说也许已经是家常便饭了。但是对于一些已经有开发经验的人来说,这是远远不够的。你必须要学习很多数据库相关的知识,而这一篇就是彻底来剖析 MySQL 中的 MVCC 是如何实现的。 看完这篇文章,你就可以知道各种隔离级别之下,MVCC 的作用是什么?MVCC 在什么时候会使用?怎么使用? 示例表 CREATE TABLE `test`.`Untitled` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `phone` char(11) NOT NULL, `name` varchar(255) NOT NULL, `age` int(3) NOT NULL, `country` varchar(255) NOT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_phone`(`phone`) USING BTREE, INDEX `idx_name`(`name`) USING BTREE

mysql学习笔记之索引类型B-TREE介绍

╄→гoц情女王★ 提交于 2020-08-06 08:54:50
B-tree索引是MySQL数据库中使用最为频繁的索引类型,特别是在innodb中经常使用;在其他数据库中b-tree索引也同样是作为最主要的索引类型的,这主要是因为b-tree索引的存储结构在数据库的数据检索中有着非常优异的表现。 这种索引的特点就是会把实际需要的数据都存放与tree的节点中,也就是说每一个节点中保存了索引的数值又加上了实际所以对应的数据(其实就是地址) 而innodb中的b-tree也就是这种结构,不过在这个基础上还是做了一点的额外的操作并称之为b+tree,主要的操作点,在节点处不再存放数据,多放在了树的根处,而且同时还存放了到其他位置的地址。 在innodb存储引擎中,存在两种不同形式的索引,一种是Cluster形式的主键索引,另外的一种则是和其他存储引擎存放形式基本相同的普通B-tree索引,这种索引在innodb存储引擎中被称为Secondary index(二级索引)。 主键索引保存的是数据,普通索引(二级索引)保存的是主键 来自六星教育学习笔记 来源: oschina 链接: https://my.oschina.net/u/3914215/blog/4310624

红黑树从头至尾插入和删除结点的全程演示图

丶灬走出姿态 提交于 2020-08-06 04:53:47
红黑树插入和删除结点的全程演示 作者:July、saturnman。 时间:二零一一年三月二十八日。 出处: http://blog.csdn.net/v_JULY_v 。 声明:版权所有,侵权必究。 ----------------------------------- 引言: 目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的阐述。而本人的红黑树系列四篇文章(详见文末的参考文献),虽然从头至尾,讲的有根有据,层次清晰,然距离读者真正做到红黑树了然于胸,则还缺点什么。 而我们知道,即便在经典的 算法 导论一书上,也没有把所有的插入、删除情况一一道尽,直接导致了不少读者的迷惑,而我的红黑树系列第4篇文章: 一步一图一代码,一定要让你真正彻底明白红黑树 ,虽然早已把所有的插入、删除情况都一一道尽了,但也缺了点东西。 缺点什么东西列?对了,缺的就是一个完完整整的,包含所有插入、删除情况全部过程的全程演示图,即缺一个例子,缺一个完整的图来从头至尾阐述这一切。 ok,本文,即以40幅图来全程演示此红黑树的所有插入,和删除情况。相信,一定会对您理解红黑树有所帮助。 话不絮烦,下面,本文便以此篇文章: 一步一图一代码,一定要让你真正彻底明白红黑树 为纲,从插入一个结点到最后插入全部结点,再到后来一个一个把结点全部删除的情况一一阐述。 由于为了有个完整统一

Linux命令:MySQL系列之四--MySQL管理创建CREATE表和索引

回眸只為那壹抹淺笑 提交于 2020-08-06 03:40:45
SQL语句: 数据库 表 索引 视图 DML语句 单字段: PRIMARY KEY 主键 UNIQUE KEY 唯一键 单或者多字段: PRIMARY KEY(col,...) UNIQUE KEY(col,...) INDEX(col,...) 数据类型: data_type: BIT [(length)] 比特 | TINYINT [(length)] [UNSIGNED] [ZEROFILL] 非常小的整数(1字节) | SMALLINT [(length)] [UNSIGNED] [ZEROFILL] 小的整数(2字节) | MEDIUMINT [(length)] [UNSIGNED] [ZEROFILL] 中等的整数(3字节) | INT [(length)] [UNSIGNED] [ZEROFILL] 整数(4字节) | INTEGER [(length)] [UNSIGNED] [ZEROFILL] 整数(4字节)相当于INT | BIGINT [(length)] [UNSIGNED] [ZEROFILL] 大的整数(8个字节) | REAL [(length,decimals)] [UNSIGNED] [ZEROFILL] 实数 | DOUBLE [(length,decimals)] [UNSIGNED] [ZEROFILL] 双数 | FLOAT [

基于oracle的sql优化

本秂侑毒 提交于 2020-08-05 01:07:31
一.编写初衷描述 【博客地址】http://www.cnblogs.com/grl214 在应有系统开发初期,由于数据库数据较少,对于sql语句各种写法的编写体现不出sql的性能优劣,随着数据的不断增加,出现海量数据,劣质sql与优质sql在执行效率甚至存在百倍差距,可见sql优化的重要性 二.Sql语句性能优化 2.1 认识Oracle的执行过程 2.2 Oracle优化法则---漏斗法则 2.3 Oracle 执行计划 2.3.1 什么是Oracle执行计划 执行计划是一条查询语句在Oracle中执行过程或者访问路径的描述. 2.3.2 查看Oracle执行计划 1.执行计划常用的列字段解释 基数:返回的结果集行数 字节:执行该步骤后返回的字节数 耗费(cust),CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好. 2.3.3 看懂Oracle执行计划 2.3.3.1执行顺序 根据缩进来判断,缩进最多的最先执行(缩进相同时,最上面的最先执行) 2.4 表的访问方式 TABLE ACCESS FULL(全表扫描) TABLE ACCESS BY ROWID(通过rowid的表存取) TABLE ACCESS BY INDEX SCAN(索引扫描) 2.4.1 ABLE ACCESS FULL(全表扫描) Oracle会读取表中的所有行

如何学java?如何斩获offer秘诀?你想要的都在这里

北城以北 提交于 2020-08-04 22:26:51
现在各大互联网公司,对Java类的校招要求越来越高,导致很多小伙伴都很迷茫. 今天分享一篇关于Java学习进阶之路,希望能帮助到一些人. 书籍 把看过的书罗列一下. 《 java核心技术:卷一 》,这个是我入门java的时候看的,非常适合新手! 《 java设计模式 》这本书虽然是个外国人写的,但是感觉不是很好。评价一般,学习设计模式的时候我一般都看大牛的博客。 《 深入理解jvm虚拟机 》 这本书不用多说,业界非常非常好的一本书,多看几遍,每一遍都有很多收获. 《 深入分析java web 技术内幕 》不得不说,这本说在各个方面都非常优秀,不愧是偶像写的书!还求山哥多多照顾。 《 Spring技术内幕 》在spring源码讲解方面,个人感觉非常不错。能够深入理解内部机制,但是需要多看几遍. 《 编程之美 》业界翘楚,在算法方面终结的非常好,题目也非常有代表性 《 剑指offer 》不用多说,和上面一样,可以锻炼一些算法能力 《 java编程思想 》传说是java行业内的神书,但是目前表示还处于一知半解状态 《 Hadoop技术内幕 》这个可以pass掉,学习hadoop的时候看的 《 TCP/IP详解,卷一:协议 》可以对tcp有更加深刻的认识 《 java网络编程 》,不是很好,将就可以。学学api还是可以的 《 分布式java应用:基础与实践 》这个是毕玄大大写的书

我去字节跳动面试,“偷”回来的面试题,题真难...

走远了吗. 提交于 2020-08-04 19:59:20
# 算法题 一面: 1. lc 里最长上升子序列的变形题 2. 实现输入英文单词联想的功能 二面: 1.矩阵旋转,要求空间复杂度 O(1) 2.无序的数组的中位数。要求时间复杂度尽可能的小 # 计算机网络 1. tcp 怎么保证数据包有序 主机每次发送数据时,TCP 就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认。 如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等。 接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。 2. tcp 和 udp 的异同 TCP 是面向流的可靠数据传输连接 UDP 是面向数据包的不可靠无连接 3. tcp 怎么保证可靠性 差错检验机制,反馈机制,重传机制,引入序号,滑动窗口协议,选择重传 4. tcp 中拥塞避免和流量控制机制 拥塞避免和流量控制这两种机制很像,但是流量控制是由接收方的接受能力也就是接收窗口所决定的,如果接收窗口够大,以动态调整发送窗口的大小调整发送速度 拥塞避免主要由网络情况所限制,网络情况良好,则加大发送速率,网络状态差(冗余 ACK 和丢包)则降低发送速率(慢启动,拥塞控制,快恢复,快重传) RENO,BBR 5. tcp

MySQL

六月ゝ 毕业季﹏ 提交于 2020-07-28 17:52:04
什么是SQL? 结构化查询语言(Structured Query Language)简称SQL ,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。 常用数据库有? 常用:Oracle, Sybase, SQL Server, DB2, MySQL, Access 等等 。 SQL语句在大部分的数据库里面都是通用的,只是部分有些特别。例如:Oracle里面没有Limit等等,其他可以自己使用之后再去了解。 下面是我在学习 SELECT的案例,以及SELECT使用的关键词 SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select

不懂数据库索引原理?因为你心里没有一点B树

只愿长相守 提交于 2020-07-28 17:17:35
什么是B树? B树是一种数据结构它按排序顺序在其节点中存储数据,B树存储数据使得每个节点按升序包含密钥,这些键中的每一个都有两个对另外两个子节点的引用,Te左侧子节点键小于当前键右侧子节点键多于当前键,如果单个节点具有n个键则它可以具有最大n+1个子节点。 为什么索引在数据库中使用? 想象一下您需要在文件中存储数字列表并搜索该列表上的给定数字,最简单的解决方案是将数据存储在数组中并在新值到来时附加值,但是如果需要检查数组中是否存在给定值则需要逐个搜索所有数组元素并检查给定值是否存在,如果你足够幸运你可以在第一个元素中找到给定的值,在最坏的情况下该值可以是数组中的最后一个元素,我们可以将这种最坏的情况表示为渐进符号中的O(n),这意味着如果您的数组大小最多为n则需要执行n次搜索才能在数组中查找给定值。 你怎么能改善这个时间?最简单的解决方案是对数组进行排序并使用二进制搜索来查找值,每当您向数组中插入一个值时它应该保持顺序,通过从数组中间选择一个值来搜索然后将所选值与搜索值进行比较,如果所选值大于搜索值则忽略数组的左侧并搜索右侧的值反之亦然。 如何在数据库中使用索引? 当B-tree进入数据库索引时这个数据结构变得有点复杂,不仅有一个键还有一个与键相关的值,该值是对实际数据记录的引用,密钥和值一起称为有效负载。 结论 数据库应该有一种有效的方式来存储读取和修改数据

24个经典的MySQL索引问题,你都遇到过哪些?

拟墨画扇 提交于 2020-07-28 09:59:39
索引 1、什么是索引? 2、索引有哪些优缺点? 3、索引使用场景(重点) 4、索引有哪几种类型? 5、索引的数据结构(b树,hash) 6、索引的基本原理 7、索引算法有哪些? 8、索引设计的原则? 9、创建索引的原则(重中之重) 10、创建索引的三种方式,删除索引 11、创建索引时需要注意什么? 12、使用索引查询一定能提高查询的性能吗?为什么 13、百万级别或以上的数据如何删除 14、前缀索引 15、什么是最左前缀原则?什么是最左匹配原则 16、B树和B+树的区别 17、使用B树的好处 18、使用B+树的好处 19、Hash索引和B+树所有有什么区别或者说优劣呢? 20、数据库为什么使用B+树而不是B树 21、B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据, 22、什么是聚簇索引?何时使用聚簇索引与非聚簇索引 23、非聚簇索引一定会回表查询吗? 24、联合索引是什么?为什么需要注意联合索引中的顺序? 1、什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。索引是一个文件