首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Innodb存储引擎的几个小知识点

// Innodb存储引擎的几个小知识点 // 01 innodb_old_blocks_time参数 在Innodb存储引擎中,采用LRU算法来来对热数据进行管理的。...02 Checkpoint的分类 今天翻看《MySQL技术内部Innodb存储引擎》一书时,发现书上讲Checkpoint动作分成了下面几类,这里记录下: ?...; flush_lru_list checkpoint是因为innodb中始终需要保证LRU列表中有100个左右的空闲数据页可以使用,如果没有,则需要进行checkpoint操作,将LRU列表尾部的数据页移除...关于它的功能,我举一个例子: 如果我们要访问id=6、7、8的三条记录,假设这三条记录在三个相邻的数据页中,如果使用同步的方法,访问一次,等待结果,那么要进行三次数据页的返回,我们才能得到结果。...而一旦启用了异步IO操作,也就是Async IO,那么我们就只需要一次操作,将id=6的数据页取出来,再往后顺延两个数据页,就能够得到id=6、7、8的这三条记录,这样减少了内存和磁盘的交互次数,MySQL

87710

从一次sql优化谈mysql索引

两台机器都出现慢sql,然而这个时候还不能断定就是我们的sql有问题,出现慢sql有可能是数据库抖动导致读延迟比较高,也有可能sql确实存在优化空间。接着去看一下数据库的监控: ?...由于有子查询和关联查询,有三条执行计划,主要看第二条和第三条,第三条也是使用seller_id索引扫描了106184行, 第二条是使用了主键索引扫描1行(直接定位到数据)。...客户端先发送一条查询给服务器; 服务器先检查查询缓存,如果命中了缓存,则立刻返回给存储在缓存中的结果,否则进入下一个阶段; 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划; MySQL 根据优化器生成的执行计划...,调用存储引擎的API来执行查询; 将结果返回客户端。...老sql执行过程 解析sql,生成执行计划,选择seller_id索引树执行查询 扫描了10684行记录找到记录 回表从主键索引树取出50条数据,选择50条返回(偏移量从0开始50条,如果偏移量从10000

1.1K62
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    干货 | Python+MySQL数据库操作

    、存储和管理数据的仓库,能直接通过条件快速查询到指定的数据。...随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。 目前,数据库主要有两种形式,一种是非关系型数据库,另一种是关系型数据库。...除了用一条条用execute( )插入之外,我们还可以用executemany()的方式批量插入,也就是val中包含的是一个元组列表,包含我们想要插入的数据。...值得注意的是:fetchall()表示的是获得所有记录;fetchone()表示只获取一条数据;fetchmany(size=3)表示获取三条记录; 限定条件查找 为了获取指定条件下的查找结果,我们可以使用...执行代码,我们可以看到处理的过程如下: 在第一批读取的三条记录中,只有两条是满足薪资大于8000的要求,第二批读取的三条记录中,只有一条满足薪资大于8000的要求,而在第三批读取的三条记录中,没有任何记录是满足薪资大于

    1.2K30

    在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回

    然后为Contact实体映射CUD存储过程和相关参数,其中删除操作的存储过程已经定义在上面。 然后,你需要考虑这样一个问题:由于我们进行的是逻辑删除,被“删除”的记录依然存储于数据库中。...实际上在数据库中,这三条数据依然存在,只是逻辑删除标识字段IS_DELETED被标记为1。 ?...三、具有自增长列的存储过程定义 接下来我们来讨论另一个常见的场景:如果一个表中存在一个自增长列作为该表的主键,当我们通过提交对应的实体对象进行记录添加操作时,数据库中真正的键值如何返回并赋值给该实体对象...这个关系的定义包含在存储过程映射的Result Columns Binding列表中。如下图所示,我设置了存储过程返回列ID和Contact属性ID之间的映射关系。 ?...基于最新的.edmx模型,我们编写如下的代码,分别创建三个Contact记录。从最终的执行结果,我们可以清晰地看到,从数据库中返回的真实ID反映在了被添加的Contact对象上了。

    1.7K80

    InnoDB(5)索引页 --mysql从入门到精通(十)

    而存储引擎innoDB存储分为几个部分,变长字段长度列表,null值列表,头部信息列表,之后就是真实存储数据列表,当数据太多,就会分页存储,每页大概16kb。..., (4, 400, 'dddd'); Query OK, 4 rows affected (0.01 sec) Records: 4 Duplicates: 0 Warnings: 0 插入之后存储的结果就是...,’aaaa’,其他值 第二条记录:0,0,0,3,0,32,2,200,’bbbb’,其他值 第三条记录:0,0,0,4,0,32,3,300,’cccc’,其他值 第四条记录:0,0,0,5,0,-...:0,0,0,2,0,32,1,100,’aaaa’,其他值 第二条记录:0,0,0,3,0,32,2,200,’bbbb’,其他值 第三条记录:0,0,0,4,0,32,3,300,’cccc’,其他值...OK, 1 row affected (0.02 sec) 第二条记录:1,0,0,3,0,0,2,200,’bbbb’,其他值 最大记录:0,0,4,1,3,0,supremum 看结果可知,delete_mark

    40040

    【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(3)

    秘诀三:拿捏存储技术(2) 9.如何掌握openGauss数据库核心技术?秘诀三:拿捏存储技术(3) 10.如何掌握openGauss数据库核心技术?...§ 幻读,指在同一个事务内,先后两次执行的、谓词条件相同的范围查询,返回的结果不同(并发写事务插入了新的记录)。 隔离级别越高,在一个事务执行过程中,它能“感知”到的并发事务的影响越小。...我们考虑T3事务三条查询的返回结果。...,只有T2,因此可以查询到T 1插入的记录v1;同理,在第三条查询开始时,第三次获取快照,T1和T2均已经提交,它们都不在第三条语句的快照中,因此可以查询到它们插入的记录v1和v2。...另一方面,如果采用可重复读的隔离级别,对于T3中的三条查询语句,均会采用第一条语句执行开始时的快照,而T1和T2均在该快照中,因此在该隔离级别下,T3的三条查询语句均不会返回v1和v2。

    36721

    MySQL InnoDB 行记录存储结构

    创建数据库和表后我们可以在data目录先看到数据库对应名称文件夹,文件夹有opt、frm、ibd三种文件: db.opt,用来存储当前数据库的默认字符集和字符校验规则。...页是 InnoDB 存储引擎磁盘管理的最小单元,数据库每次读写都是以【页】为单位的,一次最少从磁盘中读取 16K 的内容到内存中。...记录的额外信息 额外信息为的是更好的管理记录,分为变长字段长度列表、NULL值列表、记录头信息 我们来创建一个表来看看变长字段具体是存的,表结构如下,行格式 Compact,本文对于行记录的实际存储案例基于这张表...,还需要记下它的长度,COMPACT将变长列的实际长度按照字段的顺序,逆序存储在变长字段长度列表里。...8个,这三条记录对应的null值列表如下: 第一条记录: 第二条记录: 第三条记录: 3:记录头信息 记录头其实包含了很多信息,如图,我们着重了解红色部分几个比较重要的。

    87840

    是时候检查一下使用索引的姿势是否正确了!

    索引,可以有效提高我们的数据库搜索效率,各种数据库优化八股文里都有相关的知识点可背,不过单纯的被条目其实很容易忘记。...第二个的 key 指明了 MySQL 使用哪个索引来优化查询;rows 则显示了 MySQL 为了找到所需的值而要读取的行数....第一个的 Extra 为 Using where 表示这个搜索需要在 server 层进行判断(过滤),即存储引擎层无法返回满足条件的数据(当然这里也不需要回表,因为压根都没有用啥索引)。...这表有三条记录: 我们来做个简单测试,先来看如下 SQL: explain select username,address from user2 where username='javaboy';...❝Using index 表示使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中结果,这是在 MySQL 服务器层完成的,但是无须再回表查询记录。

    73910

    浅谈MySQL分页查询的工作原理

    前言 MySQL 的分页查询在我们的开发过程中还是很常见的,比如一些后台管理系统,我们一般会有查询订单列表页、商品列表页等。...只需要知道一条 SQL 语句是从客户端发起请求到 Server 层,Server 层处理之后选出成本最低的执行计划去存储引擎层进行数据查询,查询出来的数据返回给 Server 层处理,最后返回给客户端。...1.2 索引结构 InnoDB 存储引擎的索引是一颗 B+ 树,只有主键索引树会存储全部的行记录数据,二级索引只会存储该记录对应的主键 id。...数据汇总到 sort_buffer 按照name进行排序 将排序好的结果集返回给客户端 2.2.2 rowid 排序 我们发现全字段排序会存在一个问题:如果表中的字段非常多,我们把整个行记录放入 sort_buffer...,MySQL 会截取第 501 到 510 条数据,最后把这 10 行记录返回给前端。

    2K30

    【Python】高级笔记第四部分:使用Python操作数据库

    创建游标 执行SQL命令 多次执行SQL命令,执行次数由列表中元组数量决定 提交到数据库执行:db.commit()(必须支持事务操作才有效) 回到原来的数据形态:db.rollback...查找到返回一个元组否则返回None 获取前n条查找到的记录:cur.fetchmany(n) 返回结果为元组嵌套元组, ((记录1),(记录2)),查询不到内容返回空元组。...获取所有查找到的记录:cur.fetchall() 返回结果形式同上。...关闭游标对象:cur.close() 关闭数据库连接:db.close() ⭐️数据库文件存储 存储文件路径 优点:节省数据库空间,提取方便 缺点:文件或者数据库发生迁移会导致文件丢失(路径丢失,也就是说迷路了...) 存储文件本身 优点:安全可靠,数据库在文件就在。

    24820

    通过COS多版本功能快速批量恢复数据

    COS对象存储有11个9的数据保障级别,但是不保障主动删除的数据,如果真是手欠清空了存储桶。那么真的是无法挽回了。所以数据备份的事情,一定要防患于未然,提前做好高可用架构。...总结成一句话:遍历所有目标对象,找到第一个非删除版本的数据对象进行拷贝。场景第一条为删除标记,第二条为最新版本数据,第三条为次新版本数据。 第一条为最新版本数据。...第一条为删除标记,第二条为删除标记,第三条为最新版本数据,第四条为次新版本数据。...通过这个逻辑,我们只要找到第一个有实体数据的对象,做复制操作,就可以实现所有最新版的复制功能,实现批量的数据恢复。以下是已复制的object列表。...,之后执行批量恢复脚本,执行结果如下脚本执行结果完成后在目标桶查看目标桶恢复的对象列表验证成功。

    85331

    优化MongoDB复合索引

    返回结果按照rating排序。我们将分三个步骤构建查询语句,并通过MongoDB的explain()命令选择最合适的索引。...很明显,有三条满足条件的记录,通过explain(),我们可以看到Mongodb是如何找到这三条记录的: ?...和所有数据库一样,字段的顺序在MongoDB的复合索引中至关重要。如果索引以anonymous字段为前缀,Mongo可以直接跳到非匿名评论对应的记录。...第一次迭代,索引索引都返回了 ? 第二次迭代,左边和中间的索引返回了 ? 这条记录不满足查询条件,而最右边,我们的"冠军"索引,返回了 ?...等式查询,范围查询,和排序 现在,我们对于查询某一段时间内的非匿名记录,有了最优索引。最后,我们要将结果集按照rating字段由高到低进行排序后返回。 ?

    2.8K30

    11-存储过程和函数

    减少数据库服务器的连接次数,提高效率 */ # 存储过程创建 CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END # 注意 1....存储过程的结尾可以用DELIMITER重新配置 语法: DELIMITER 结束标记 # 调用语法 CALL 存储过程名(实参列表); # 空参的存储过程 # 案例:插入到admin表中三条记录...`password`; # 输出结果 SELECT IF(result>0,'成功','失败') 结果; END # 调用 CALL p3('john','8888'); # 创建待out...,适合于批量插入或修改 函数有且仅有一个返回值,适合处理数据后返回一个结果 */ # 创建语法 CREATE FUNCTION 方法名(参数列表) RETURNS 返回类型 BEGIN 函数体...DELIMITER设置终止符 */ # 调用语法,执行函数体内所有语句,并最终显示返回值 SELECT 函数名(参数列表); # 案例:无参有返回值,返回公司员工格式 use myemployees

    37020

    优化MongoDB复合索引

    返回结果按照rating排序。我们将分三个步骤构建查询语句,并通过MongoDB的explain()命令选择最合适的索引。...很明显,有三条满足条件的记录,通过explain(),我们可以看到Mongodb是如何找到这三条记录的: ?...和所有数据库一样,字段的顺序在MongoDB的复合索引中至关重要。如果索引以anonymous字段为前缀,Mongo可以直接跳到非匿名评论对应的记录。...第一次迭代,索引索引都返回了 ? 第二次迭代,左边和中间的索引返回了 ? 这条记录不满足查询条件,而最右边,我们的"冠军"索引,返回了 ?...等式查询,范围查询,和排序 现在,我们对于查询某一段时间内的非匿名记录,有了最优索引。最后,我们要将结果集按照rating字段由高到低进行排序后返回。 ?

    2.9K20

    以Terminal历史记录来提高Linux操作效率

    刚接触命令行的同学会觉得这样就找到历史的操作真的非常棒。但是用的久了,会觉得每次上下键查看太烦人,甚至会有很多疑问和其他的一些需求。...比如: 怎么快速找到之前执行过的命令; 是否可以利用历史记录提高控制台操作效率; 为什么有些命令明明执行过但却找不到; 还有很多其他要求。...history [n] 展示最近执行的n条记录,例如: $ history 3 按时间倒序展示最近历史命令,结果如下: $ mkdir logs $ cd logs $ cp /var/log...突然觉得这个功能真的好强大,有效利用可以减少无用历史命令的存储,还可以启到安全作用。当然,具体省略哪些命令要因人具体情况而定,也不能省略太多。...以第三条历史命令为例,如下: $ echo !3:^-$ // 打印全部参数列表,即example01 example02 Public/ $ echo !

    2.6K20

    Jmeter系列(32)- 详解 CSV 数据文件设置

    了解一哈什么是 CSV 文件 为了实现简单的数据存储,是一个纯文本的文件 最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中 CSV 文件可以用记事本、excel打开;用记事本打开的话,...运行结果 ?...知识点 忽略首行 True:一般首行都是字段名字,比如栗子的 mobile,一般都需要忽略除非没有字段名 是否允许带引号 False:可以看到有引号的三条记录 8、9、10,都还是保留了引号 再次循环...两个字段,共有 10 条记录,最后三条记录有分别有三种引号 csv 数据文件设置 线程组结构树和上面栗子差不多一样,线程数仍然 = 15 ?...不忽略首行就会把首行的字段名都返回回来,如:1-mobile-age 数据有双引号 时,会把双引号忽略掉, '' 单引号不算 "" EOF 是文件结束符,没有开启再次循环时,会直接返回 EOF 开启遇到文件结束符停止线程

    3K20

    MongoDB 学习笔记(入门看这一篇足矣)

    Boolean 布尔值,存储布尔值(真假) Double 双精度浮点值,用于存储浮点值 Min、Max keys 讲一个值与 BSON (二进制 JSON) 元素的最低值和最高值相比 Array 用于将数组或者列表多个值存储为一个键...multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。...Gorit111" }] } ) 4.3 分页查询 分页参数 Limit() db.collection_name.find().limit(number); // 查询数据库汇中的三条记录...,如果数据库没有指定 limit() ,默认查询所有的数据 db.user.find().limit(3); 使用 skip() 跳跃指定数量的数据 // 跳过第一条记录,查询往后的三条记录 db.user.find...:1}) // 根据年龄降序排列 db.user.find().sort({"age":-1}); 4.5 聚合 MangoDB 中聚合(aggregate)主要用于处理数据(诸如平均值,求和等)并返回计算的结果

    5K44

    微服务架构下的数据一致性保证(二)

    1) 微服务A投递事件的时候可能消息代理已经处理成功,但是返回响应的时候网络异常, 导致append操作抛出异常。最终结果是事件被投递,数据库确被回滚。 ?...事件恢复服务定时从事件表中恢复未发布成功的事件,重新发布,重新发布成功才删除记录的事件。 其中第2条的操作主要是为了增加发布事件的实时性,由第三条保证事件一定被发布。...事件系统的事件恢复服务会定期找到未确认发送的事件向业务服务查询状态,根据业务服务返回的状态决定事件是要发布还是取消。 该方式将业务系统和事件系统独立解耦,都可以独立伸缩。...对于本身不具有幂等性的操作,主要思想是为每条事件存储执行结果,当收到一条事件时我们需要根据事件的id查询该事件是否已经执行过,如果执行过直接返回上一次的执行结果,否则调度执行事件。 ? ?...当收到一条事件时,过滤服务首先查询事件存储,确定该条事件是否已经被处理过,如果事件已经被处理过,直接返回存储的结果;否则调度业务服务执行处理,并将处理完的结果存储到事件存储中。

    1.2K60
    领券