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

「小议」 源码收获到了什么?阅读源码那点小事

一 前言 说到源码,大家脑海里可能浮现出四个字 太难了???。...源码貌似和我们遥不可及,因为在日常工作,我们基本掌握在熟练的程度上,就能够满足工作需求,即便是想看源码,也会被源码复杂的逻辑拒之门外,成为了我们心中挥之不去的阴影。那么我们真的有必要阅读源码吗?...感觉过程是痛苦的,但是读完之后,就会感觉收获颇丰,感觉付出都是值得的。接下来我们一起探讨一下,阅读源码那些事。 二 为什么源码? 1 为了面试 一场面试题的思考? 假设这是一场面试。...而阅读源码就是底层开始全方面认识框架的最佳方式。而且如果把源码搞得明明白白。可以让面试官刮目相看。甚至能够‘吊打’面试官??。 2 更清晰的运用框架 阅读源码的过程,能够了解底层是怎么运作的。...如果不带着问题阅读,就会处于一种无目标,盲目的状态,在这种状态下,尤其看无聊和繁琐的源码,就会精力不集中,长时间就会犯困,无法坚持下去。

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

MySQL 的表级锁很差劲吗?

然后去第二个窗口中做查询操作,如下: ? 可以看到,由于是排他锁,所以查询操作也被阻塞了。此时需要在窗口 1 解除表的锁定,窗口 2 查询操作才会继续执行下去。 ?...concurrent_insert 有三种不同的取值: NEVER:加了锁之后,不允许其他 session 并发插入。...可以看到,数据库默认的 concurrent_insert 取值为 AUTO。有小伙伴可能会说,啥?AUTO?那为啥在 2.1 小结,当表加了锁之后,其他 session 无法插入数据呢?...图中可以看到,读写操作都可以顺利执行。 但是这个时候,如果我们去窗口 1 执行查询,如下: ?...这是给大家演示的默认的 concurrent_insert 的行为,大家也可以通过如下 SQL 修改该值: set global concurrent_insert = ALWAYS; ?

95340

MySQL8.0基础教程 - 事务隔离级别解决之道

、不可重复读和幻都代表了什么,用一个例子来给你讲解下。...脏、不可重复读和幻这三种异常情况,是在SQL-92标准定义的,同时SQL-92标准还定义了4种隔离级别来解决这些异常情况。...可重复读,保证一个事务在相同查询条件下两次查询得到的数据结果是一致的,可以避免不可重复读和脏,但无法避免幻。MySQL默认的隔离级别就是可重复读。...使用MySQL客户端来模拟三种异常 在讲解这三种异常的时候举了一个英雄数据表查询的例子,你还可以自己写SQL来模拟一下这三种异常。...首先我们需要一个英雄数据表heros_temp,具体表结构和数据,你可以GitHub上下载heros_temp.sql文件。 你也可以执行下面的SQL文件,来完成heros_temp数据表的创建。

92341

一文了解Mysql

而关系型数据库使用最为广泛的莫过于Oracle、Mysql以及SQL Server。这里是以Mysql作为基础进行讲解。 数据库的几个基本术语 数据库:存储数据的仓库,是一些关联表的集合。...串行:该级别下隔离程度最高,事务只能一个接着一个串行执行,无法并发执行。每次串行都需要获得表级共享锁,读写操作都会阻塞。...当然其实很不建议在数据库使用ENUM限制取值范围,因为坑其实挺多的,比如ENUM通过角标取值,但是角标1开始,因为0留给空串了,再或者在ENUM0和"0"是不一样的,如果将0当做角标去操作由于ENUM...对这种引擎的表的查询常常返回一个空集。可以应用于主从复制的分发主库。 mysqlchar与varchar的区别? char:定长,一般用于固定长度的数据存储。比如手机号。存取效率高。...锁的角度来说,表级锁适合查询为主,行级锁更适合有大量按索引条件并发更新数据。当然最重要的是一定要防止出现死锁现象。 数据库三范式 第一范式:属性不可分割。

90720

1 数据库的初恋

,SQL 键值数据库 通过key-value方式存储,key为唯一表示,优点,查询快,缺点是无法像关系型数据库一样使用条件过滤,这样可能导致遍历所有的键,消耗大量的计算。...6 Oraclesql如何执行的 ? 查询执行流程 语法检查:检查SQL拼写是否正确。 语义检查:检查SQL访问对象是否存在。 权限检查:检查用户是否有访问权限。...唯一性约束 字段在表可以使唯一的。 NOT NULL约束 表明字段不应为空,必须有取值。...CHECK约束 检查特定字段取值范围的有效性 11 常见查询语句 查询姓名列 查询单列和查询多列 SELECT author_name FROM authors_name; SELECT * FROM...在SQL标准,该隔离级别消除了不可重复读,但是还存在幻 串行: 全串行化的,每次都需要获得表级共享锁,读写相互都会阻塞. 20 python如何操作oracle ? 简单操作 插入数据 ?

1.1K20

一个执行计划异常变更的案例 - 前传

(6) DBA反馈SQL语句执行计划发生了变化,数据库层面做了一些操作后,问题解决,目前尚不知晓做了什么具体的操作。...实验: 创建测试表t1,其中name字段设置索引,取值为10000个A和1个B。 ? 我们看下用查询条件name=’A’的SQL使用了什么执行计划, ?...再看下使用查询条件name=’B’的SQL用了什么执行计划, ? ?...显而易见,因为取值为A的记录占据了10000/10001接近100%的比重,即这查询条件返回了几乎表的所有数据,使用全表扫描的成本一般会小于使用索引的成本,由于TABLE ACCESS FULL会扫描表高水位线以下的数据块...取值为B的记录占据了1/10001很小的比重,因此使用索引扫描,直接访问B*Tree二叉树,定位到这一条数据的rowid再回表查询所有select字段的成本要远小于扫描整张表数据的成本。

51940

一次夜维SQL的性能优化

; 这几次超长执行,数据库层面看,反映的现象就是物理超高,例如之前这条SQL物理,值是3000,这几次值就是10000。...由于子查询肯定全表扫描,每次执行,都要读取200万数据,第一次执行SQL语句,就需要从磁盘文件读取,放入buffer cache,此时消耗物理,若这个时间段内,对于数据库缓存消耗高,例如其他大表的频繁加载...alert日志,确认就是这条SQL,导致了这个ORA-01555错误, ORA-01555 caused by SQL statement below (SQL ID: xxxxxxxxxx, Query...“DML语句需要用UNDO记录的数据找到前镜像时,该记录在UNDO已经被覆盖,导致无法利用UNDO的记录完成一致性”,曾写了一篇小文介绍(http://blog.csdn.net/bisal/article...A检索,未指定任何order by排序,因此默认会按照数据,在数据块的排序顺序,进行读取,无法保证有序。

64040

MySQL 百万数据量的 count(*) 查询如何优化?

明确需求 对这个问题有兴趣是源于一次开发遇到要统计人数的需求。类似于“得到”专栏的订阅数。 但是的数据量比这个大很多,而对数据的准确性要求就不那么高。所以首先要明确需求。...其他答案有的说了用缓存,有的答案对比了count(*)、count(1)的区别,都很好,但是认为还是要看一下题主的场景。根据我实际开发的经验总结如下几个方面,FYI。 ?...因为T1事务还没有提交,所以插入的数据,B是不到的,所以逻辑上来说是一致的。 数据量大/准确性要求高/请求量特别高 抱歉,没遇到过。...遍历整个表,做了优化,不取值,累加。 结合mysql的一些索引查询知识,我们可以大致得出如下结论。 ? 建议直接使用count(*)。 相关阅读 为什么要用自增主键?...蚂蚁金服面试题: 一条SQL查询语句如何执行的 索引使用策略及优化

12K41

mysql数据库面试题目及答案_java面试数据库常见问题

假设,有一个场景只需要针对资讯的月份进行查询,那么,SQL 语句可以写成: select * from news where news_month = 1 此时,无法使用 news_year_month_idx...6)范围查询对多列查询的影响 查询的某个列有范围查询,则其右边所有列都无法使用索引优化查找。 举个例子,假设有一个场景需要查询本周发布的资讯文章,其中的条件是必须是启用状态,且发布时间在这周内。...对于这种情况,的建议:对于范围查询,务必要注意它带来的副作用,并且尽量少用范围查询,可以通过曲线救国的方式满足业务场景。...where news_weekth = 1 and enable = 1 然而,并不是所有的范围查询都可以进行改造,对于必须使用范围查询无法改造的情况,的建议:不必试图用 SQL 来解决所有问题,...这句话的意思是把查询语句的where都应用到表返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高 2.explain查看执行计划,是否与1预期一致(锁定记录较少的表开始查询

88830

2021-Java后端工程师面试指南-(MySQL)

也就是在一般情况下,一次最少磁盘读取16KB的内容到内存,一次最少把内存的16KB内容刷新到磁盘。...聊聊有哪些数据结构适合做索引结构的,优缺点是什么 Hash索引:hash表,相信大家都很熟悉了,他的优点查询速度快,但是他不支持范围查询,哈希表这种结构适用于只有等值查询的场景 二叉树:如果数据多了,...并不是所有索引对查询都有效,SQL是根据表数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用...count(字段),如果这个“字段”是定义为 not null 的话,一行行地记录里面读出这个字段,判断不能为 null,按行累加; count() ,并不会把全部字段取出来,而是专门做了优化,不取值...聊聊它的隔离级别吧 未提交 会发生脏 已提交 会发生 不可重复读 可重复读 会发生 幻 串行化,没有问题 说说sping默认的事务传播级别 Spring事务的默认实现使用的是AOP,也就是代理的方式

47320

MySQL 加锁处理分析

在工作过程,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让帮助解决一些死锁的问题。...; 为什么将 插入/更新/删除 操作,都归为当前?可以看看下面这个 更新 操作,在数据库的执行流程: ? 图中,可以看到,一个Update操作的具体流程。...而当这些问题有了明确的答案之后,给定的SQL会加什么锁,也就一目了然。下面,将这些问题的答案进行组合,然后按照易到难的顺序,逐个分析每种组合下,对应的SQL会加哪些锁?...一个等值查询,最多只能返回一条记录,而且新的相同取值的记录,一定不会在新插入进来,因此也就避免了GAP锁的使用。...具体的介绍,建议阅读之前的一篇文章:SQL的where条件,在数据库中提取与应用浅析 。

3.5K61

京东二面:MySQL 主从延迟,读写分离 7 种解决方案

大家好,是Tom哥 我们都知道互联网数据有个特性,大部分场景都是 多写少,比如:微博、微信、淘宝电商,按照 二八原则,流量占比甚至能达到 90% 结合这个特性,我们对底层的数据库架构也会做相应调整...库 通过 SQL 线程回放 binlog ,并在从库表中生成相应数据 如果是 SQL,请求会通过 负载均衡 策略,挑选一个 库 处理用户请求 看似非常合理,细想却不是那么回事 主库 与...,所以每次接收请求时,库还是无法确认是否已经同步数据,方案实用性不高。...表示已经库已经同步了数据,可以在从库执行 查询 操作 否则,在主库执行 查询 操作 缺点: 跟上面的 master_pos_wait 类似,如果 写操作 与 操作 没有上下文关联,那么 GTID 无法传递...我们可以考虑引入缓存作为缓冲介质 处理过程: 客户端 写 SQL ,操作主库 同步将缓存的数据删除 当客户端读数据时,优先从缓存加载 如果 缓存没有,会强制查询主库预热数据 缺点: K-V 存储,适用一些简单的查询条件场景

57920

mysql之MVCC 配置优化 数据库表设计(四)

Undo log 实现多版本并发控制:事务未提交之前,Undo 保存了未提交之前的版本数据,Undo 的数据可作为数据旧版本快照供其他并发事务进行快照读 快照读与当前 快照读:SQL 读取的...数据 是快照版本,也就是历史版本 , 普通的SELECT 就是快照读 innodb 快照读,数据的读取将由 cache( 原本数据) + undo( 事务修改过的数据) 两部分组成 当前SQL 读取的...通过锁机制来保证读取的数据无法通过其他事务进行修改 UPDATE 、DELETE 、INSERT 、SELECT … LOCK IN SHARE MODE 、SELECT … FOR UPDATE 都是当前...,马上为connection 分配配置的内存大小 join_buffer_size connection 关联查询缓冲区大小 建议256K( 默认值)-> 1M 之内 当查询语句中有关联查询时,马上分配配置大小的内存用这个关联查询...简单一点 : 1 , 每一列只有一个单一的值 ,不可再拆分 2 , 每一行都 有主键能进行区分 3 , 每一个表都不包含其他表已经包含的非主键 充分的满足第一范式设计将为表建立太量的列 数据磁盘到缓冲区

1K20

《逆袭进大厂》第十二弹之MySQL重点篇27问27答

如果您认识某个字,您可以快速地自动查到这个字。...假设,有一个场景只需要针对资讯的月份进行查询,那么,SQL 语句可以写成: select * from news where news_month = 1 此时,无法使用 news_year_month_idx...where news_weekth = 1 and enable = 1 然而,并不是所有的范围查询都可以进行改造,对于必须使用范围查询无法改造的情况,的建议:不必试图用 SQL 来解决所有问题.../写分离:经典的数据库拆分方案,主库负责写,库负责; 拆分表:分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。...一、内存角度上说,数据库的索引一般是在磁盘上,数据量大的情况可能无法一次性装入内存,B+树的设计可以允许数据分批加载。

62750
领券