数据库
文章平均质量分 77
qfc8930858
念念不忘,必有回响!
展开
-
2021-03-19
场景+案例分析,SQL优化这么做就对了!目录 前言 SQL优化一般步骤 1、通过慢查日志等定位那些执行效率较低的SQL语句 2、explain 分析SQL的执行计划 3、show profile 分析 4、trace 5、确定问题并采用相应的措施 场景分析 案例1、最左匹配 案例2、隐式转换 案例3、大分页 案例4、in + order.转载 2021-03-19 12:44:23 · 204 阅读 · 0 评论 -
2021-03-18
搞懂 MySQL Explain 命令之前不要说自己会SQL优化MySQLexplain命令是查询性能优化不可缺少的一部分,该文主要讲解 explain 命令的使用及相关参数说明。explain 命令基本使用在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的 SQL 语句,找出这些 SQL 语句并不意味着完事了。此时我们常常用到 explain 这个命令来查看一个这些 SQL 语句的执行计划,查看该 SQL 语句有没有使用上了索引,有没有做全表扫描。mysql>...转载 2021-03-18 15:22:42 · 92 阅读 · 1 评论 -
分库分表学习(二)
现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?这个是我们常用的一种迁移方案,比较靠谱一些,不用停机,不用看北京凌晨4点的风景简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,都除了对老库增删改,都加上对新库的增删改,这就是所谓双写,同时写俩库,老库和新库。然后系统部署之后,新库数据差太远,用之前说的导数工具,跑起来读老库数...原创 2020-02-01 10:51:45 · 126 阅读 · 0 评论 -
一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。一 MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构...原创 2019-08-02 22:33:24 · 108 阅读 · 0 评论 -
MySQL 第一范式 第二范式 第三范式 BC范式
第一范式第一范式:所有属性都是不可分割的原子值。也就是每个属性都是不可再分的。例如下图就不符合第一范式的要求实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。如果我们要在RDBMS中表现表中的数据,就得设计...转载 2019-08-04 14:28:31 · 1253 阅读 · 0 评论 -
多表连接查询()
自连接查询:一个表自己与自己建立连接称为自连接或自身连接。进行自连接就如同两个分开的表一样,可以把一个表的某一行与同一表中的另一行连接起来。例:查询选学“101”课程的成绩高于“9505201”号学生成绩的所有学生记录,并按成绩从高到低排列。select x.* from sclass x,sclass ywhere x.cno=''101'' and x.degree&...原创 2019-04-19 16:07:58 · 269 阅读 · 0 评论 -
数据库中为什么用B+树数据结构实现索引而不是用B-树(个人的理解)
一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。一个m阶的B+树具有如下...原创 2019-04-21 17:26:26 · 1350 阅读 · 0 评论 -
分库分表学习
1.为什么要分库分表?分库分表是两个不同的概念,分表是为了避免单表的数据量太大,执行SQL时影响语句的执行性能;分库主要是为了提高系统的并发量。单个库的并发量最好维持在(1000)左右。2.数据库如何拆分?垂直拆分:例如一张表有10个字段,拆分为一张表3个字段(查询频率比较高),和一张表7个字段(查询频率比较低)。因为数据库有缓存,这样缓存区能够存储更多查询频率比较高的字段,进而提...原创 2020-02-01 10:51:13 · 136 阅读 · 0 评论 -
My'SQL主从复制的原理
一、什么是主从复制?主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库二 、为什么要做主从复制?1. 数据同步备份 : master发生故障后,可以马上切换到slave,降低服务风险2. 读写分离 : 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制...原创 2019-05-18 21:11:25 · 400 阅读 · 0 评论 -
Hibernate 丢失更新的问题 及 解决的办法
1. 如果不考虑隔离性,也会产生写入数据的问题,这一类的问题叫丢失更新的问题。2. 例如:两个事务同时对某一条记录做修改,就会引发丢失更新的问题。 * A事务和B事务同时获取到一条数据,同时再做修改 * 如果A事务修改完成后,提交了事务 * B事务修改完成后,不管是提交还是回滚,如果...原创 2019-04-17 15:45:58 · 412 阅读 · 0 评论 -
缓存雪崩和缓存穿透问题解决方案
缓存雪崩简介:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决办法(中华石杉老师在他的视频中提到过,视频地址在最后一个问题中有提到): 事前:尽量保证整个 redis 集群的高可用性,发现机器宕机尽快补上。选择合适的内存淘汰策略。 事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL崩掉 ...原创 2019-04-25 21:07:57 · 648 阅读 · 0 评论 -
InnoDB中的B+树索引和哈希索引
B+树索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点中进行搜索。最终存储引擎要么找到对应的值,要么该记录不存在。(b+树的叶子节点中存有索引值所在行的行号)建立在B+树上面的索引B+树索引的查询类型B-Tree索引适用于全键值、键值范围或键前缀查找其中键前缀查找只适用于根据最左前缀的查找。全值匹配全值匹配指的是和...原创 2019-04-21 20:57:04 · 978 阅读 · 0 评论 -
聚簇索引和非聚簇索引
聚簇索引的个人理解:聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。当表有聚簇索引时,它的数据行实际上存放在索引的叶子节点中。通常默认都是主键,设置了主键,系统默认就为你加上了聚簇索引,当然有人说我不想拿主键作为聚簇索引,我需要用其他字段作为索引,当然这也是可以的,这就需要你在设置主键之前自己手动的先添加上唯一的聚簇索引,然后再设置主键,这样就木有问题啦。通过主键建立的B+树索引的...原创 2019-04-21 20:22:38 · 228 阅读 · 0 评论 -
redis补充
Redis 4.0 对于持久化机制的优化Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通过配置项 aof-use-rdb-preamble 开启)。如果把混合持久化打开,AOF 重写的时候就直接把 RDB 的内容写到 AOF 文件开头。这样做的好处是可以结合 RDB 和 AOF 的优点, 快速加载同时避免丢失过多的数据。当然缺点也是有的, AOF 里面的 R...原创 2019-04-25 19:46:00 · 102 阅读 · 0 评论 -
MySQL常见的两种存储引擎
1.什么是存储引擎 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储...转载 2019-04-12 12:51:29 · 554 阅读 · 0 评论 -
mybatis缓存机制详解
mybatis提供了缓存机制减轻数据库压力,提高数据库性能mybatis的缓存分为两级:一级缓存、二级缓存一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的一级缓存: mybatis的一级缓存是SqlSession级别的缓存,在操作数据库...原创 2019-03-30 14:24:52 · 117 阅读 · 0 评论 -
PreparedStatement和Statement区别
技术原理该 PreparedStatement接口继承Statement,并与之在两方面有所不同:PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位...原创 2019-03-30 10:13:20 · 112 阅读 · 0 评论 -
数据库事务的四大特性以及事务的隔离级别
如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到...原创 2019-03-13 12:57:22 · 107 阅读 · 0 评论 -
在数据库中,视图有什么用?什么时候需要用到视图?
第一点:使用视图,可以定制用户数据,聚焦特定的数据。解释:在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视图,以后他在查询数据时,只需select*fromview_caigou就可以啦。第二点:使用视图,可...转载 2019-03-14 12:45:30 · 1810 阅读 · 0 评论 -
数据库MVCC 隔离级别
1. 什么是MVCC?多版本并发控制(Multi-Version Concurrency Control, MVCC),顾名思义,在并发访问的时候,数据存在版本的概念,可以有效地提升数据库并发能力,常见的数据库如MySQL、MS SQL Server、IBM DB2、Hbase、MongoDB等等都在使用。简单讲,如果没有MVCC,当想要读取的数据被其他事务用排它锁锁住时,只能互斥等待;而这...原创 2019-04-26 15:37:25 · 940 阅读 · 1 评论 -
Hibernate关联关系映射:一对多级联保存
原文地址:http://blog.sina.com.cn/s/blog_981ee5d80102w884.html一对多搭建的一个测试向我们的客户表和订单表插入数据现在我们是一个客户两个订单了//建立关系:单独的客户和单独的订单这个时候双方都建立好联系了这个时候我们来测试一下,执行...转载 2019-04-18 09:29:52 · 413 阅读 · 0 评论 -
数据库(外键及其约束理解)
一:首先是外键的定义 如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。二:主键表和外键表的理解(1)以公共关键字作主键的表为主键表(父表,主表)(2)以公共关键字作外键的表为外键表(从表,外表)...转载 2019-04-18 10:25:38 · 20089 阅读 · 0 评论 -
MySQL中的事务日志
事务的实现是基于数据库的存储引擎。不同的存储引擎对事务的支持程度不一样。mysql中支持事务的存储引擎有innoDB和NDB。innoDB是mysql默认的存储引擎,默认的隔离级别是RR,并且在RR的隔离级别下更进一步,通过多版本并发控制(MVCC,Multiversion Concurrency Control)解决不可重复读问题,加上间隙锁(也就是并发控制)解决幻读问题。因此innoDB的R...原创 2019-05-12 21:24:29 · 3255 阅读 · 0 评论 -
MySQL中的索引
常用的两种索引结构:B-tree和HASHB-treeB-tree索引能够加快访问数据的速度,因为存储引擎不再需要经行全表扫描来获取需要的数据,取而代之的是从根节点开始搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下查找。通常比较节点页的值和要查找的值可以找到合适的指针进入下层子节点。B-tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。如...转载 2019-05-09 14:47:20 · 128 阅读 · 0 评论 -
MySQL主从复制————半同步复制原理
在MySQL5.5之前的版本中,MySQL的复制是异步复制,主库和从库的数据之间存在一定的延迟,比如网络故障等各种原因,这样子容易存在隐患就是:当在主库写入一个事务成功后并提交了,但是由于从库延迟没有及时得到主库推送的Binlog日志时,或者主库突然宕机了,那么此时从库就可能损失这个事务,从而造成主从不一致的状况。因此我们MySQL5.5版本之后引入了半同步复制的概念半同步复制的原理:...原创 2019-05-18 22:48:02 · 212 阅读 · 0 评论 -
联合索引的最左前缀匹配原则
索引的最左前缀原理:通常我们在建立联合索引的时候,也就是对多个字段建立索引,相信建立过索引的同学们会发现,无论是oralce还是mysql都会让我们选择索引的顺序,比如我们想在a,b,c三个字段上建立一个联合索引,我们可以选择自己想要的优先级,a、b、c,或者是b、a、c或者是c、a、b等顺序。为什么数据库会让我们选择字段的顺序呢?不都是三个字段的联合索引么?这里就引出了数据库索引的最左前缀...原创 2019-05-05 20:34:41 · 1367 阅读 · 0 评论 -
Redis学习----------快照
redis 本地持久化到硬盘有两种方式,一是快照(snapshotting),二是只追加文件(append-only file AOF)快照快照,顾名思义可以理解为拍照一样,把整个内存数据映射到硬盘中,保存一份到硬盘,因此恢复数据起来比较快,把数据映射回去即可,不像AOF,一条条的执行操作命令。产生快照的过程:1 执行bgsave命令(此时redis会fork一个子进程,子进程负责生成...转载 2019-04-25 13:54:50 · 336 阅读 · 0 评论 -
hibernate三种状态解析
二、hibernate中对象的三种状态 瞬时状态transient、持久状态(托管)persistent、游离(脱管)detached状态 注意:托管、脱管要分清楚,分不清楚就用持久和游离 瞬时状态:使用new操作符初始化的对象的状态就是瞬时的, 1、在数据库表中,没有任何一条数据与它对应 ...转载 2019-04-18 19:45:48 · 149 阅读 · 0 评论 -
hibernate 一级缓存
一、一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1、首先session将一个对象加入自己的管理范围内,其实也就是把该对象放入自己的一级缓存中,例如,session.save(xxx);这个语句就是将xxx保存在自己的一级缓存...原创 2019-04-18 19:43:15 · 93 阅读 · 0 评论 -
hibernate 多对多关系维护
多对多关系维护:通过inverse属性值的设置来控制inverse :反方分为3种情况:1、inverse=“false”inverse=“false”2、正确inverse=“false”inverse=“true”指的是将级联关系的维护的责任交给一方控制3、inverse=“true”inverse=“true”例如:两个人去吃饭,吃完饭付款:第一种情况相当于...转载 2019-04-18 15:39:05 · 83 阅读 · 0 评论 -
Hibernate外键维护
inverter是hibernate维护关联关系的配置也就是说我们必须是双向关联关系踩能配置该属性,在one-to-many注解中有一个mappedBy属性用于标记当实体之间是双向的,作用相当与Inverse属性,---------------------------------------------------Inverse是hibernate双向关系中的基本概念。inverse的真...原创 2019-04-18 14:31:54 · 145 阅读 · 0 评论 -
hibernate框架一对多之放弃外键的维护
在上一篇文章中,Customer中有private Set<Linkman> linkmans = new HashSet<Linkman>();Linkman中有private Customer customer; 也就是两者都维护了外键。可以放弃一方面的外键的维护。一对多可以不用放弃。多对多必须放弃,不然程序会报错。1. 先测试双方都维护外键的时候,会产生...转载 2019-04-18 12:31:04 · 424 阅读 · 0 评论 -
MySQL中四种常用存储引擎的介绍
MySQL常用的四种引擎的介绍(1):MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有 要求或者以select,insert为主的应用基本上可以用这个引擎来创建表支持3种不同的存储格式,分别是:静态表;动态表;压缩表静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多...原创 2019-03-13 21:45:17 · 117 阅读 · 0 评论