
数据库
InAHurryv
或取诸怀抱悟言一室之内
展开
-
面试:你项目遇到什么问题 怎么解决的。
在 使用netty 框架的时候如果用来处理数据 进行数据库的插入从而对后续的检测提供数据。那么如果传感器客户端 发送数据量大的时候 数据库的插入压力会很大。这时候有两种方法一种就是减少客户端传感器的发送检测数据的频率,另一种方式从数据库存储引擎上下功夫。我们知道 innodb_flush_log_at_commit = N 和sysc_binlog = M 这两个参数是十分重要的。当N= 1 的时候 是十分“严谨”的,即每次事务提交的时候log Thread 不仅将redolog_buffer 中的内容写原创 2021-04-14 22:54:27 · 1352 阅读 · 1 评论 -
mysql索引的最左匹配 索引下推
对于表 user(id,name,age) 创建一个唯一联合索引 (id,name,age)对于where id = xx and name = xx and age = xx 会使用联合索引 explain SQL type 为 const 。对于 其他的全索引的排列组合字段 即不管是 name = xx and id = xx and age = xx 都是一样的会走联合索引当遇到 like in < >= 等范围查询的时候,联合索引会不匹配比如 where id = 1 a原创 2021-04-14 17:27:22 · 190 阅读 · 0 评论 -
再谈索引
index record contains only the indexed field and a pointer to the original record, it stands to the reson that it will be smaller the multifield record that it points to.mysql 可以在表这个级别上选取自己的存储引擎,不同的表可以选取不同的存储引擎,默认的存储引擎是InnoDB。mysql的整体架构如下...原创 2021-01-25 09:33:29 · 97 阅读 · 0 评论 -
事务-----故障恢复
事务包含两大部分-1、并发控制2、故障恢复。故障分为事务故障(影响范围为发生故障的事务)系统故障(整个数据库)。常用的恢复故障的方法为重做或者撤销。数据库缓冲区策略:Force 事务commit时候必须从DB buffer 写入磁盘中。 steal:事务commit之前可以写入到磁盘中。 No steal 不允许事务commit之前将内存中的数据写入到磁盘中。No force 可以在commit之后一段时间再将内存写入磁盘。 最常见的是NO force / steal 因为性能高,灵活。日志:只能追加原创 2020-10-23 17:03:15 · 1675 阅读 · 0 评论 -
数据库隔离级别、行锁、间隙锁、表锁、封锁协议 MVCC
事务的四个特性:原子性、一致性、隔离性、持久性。加锁解锁的时机1、加写锁、不在访问数据时释放锁。避免丢失修改、但是出现脏读、不可重复读、2、加写锁、事务结束之后释放锁。避免丢失修改、脏读但是出现不可重复读3、加读锁 不在访问数据后释放读锁,也加写锁、事务结束后释放锁。避免不可重复读4、加读所和加写锁 都在事务结束后释放。避免所有的不一致。如幻读数据库隔离级别:read uncommited read commited repetead read serializationmysql 默认的隔离原创 2020-10-22 15:59:41 · 367 阅读 · 0 评论 -
索引的设置以及避免失效
如何尽可能避免索引失效?一条dml(最重要的还是查询sql),要经过编译(形成关系代数表达式)-》逻辑优化(比如多表连接 尽可能将选择操作 投影操作提前)-》物理优化(为每一个基本的关系代数操作选择例行程序)-》交给执行引擎 执行。索引失效就是DBMS发现全表扫描的效率更高,那么显然不走索引了。in 可能会导致索引失效like可能会导致索引失效< > != not in not like 等反向查询 可能会导致索引失效索引列使用 is null is not null 肯能会使索引原创 2020-10-21 18:40:49 · 247 阅读 · 1 评论 -
无损分解和保持依赖分解我懂了吗
设关系模式R 的分解ρ = (R1,…,Rk ) mρ(r)=πRi(r)连接 ;如果r = mρ(r)那么就称ρ为R的无损分解。无损分解的检验算法:输入:关系模式 R = A1 A2 …An ,函数依赖集合F,分解ρ = (R1,R2 …Rk)方法:1、构造k行n列的表,如果Aj 属于Ri 就在对应的二维表格处填写aj否则填写bij ;2、对于任意 β->γ in F ,修改表,即如果β的属性相同的行,γ属性同样相同。3、修改表的过程中,若发现某一行全部为a1…an,则为无损连接。我们一般原创 2020-08-19 23:20:42 · 1652 阅读 · 0 评论 -
范式我懂了吗
减少数据冗余消除异常(插入异常、删除异常、更新异常)关系模式R(U,F)属于第一范式的话,若对于R的每个非平凡多值依赖x->->y x为超键 则称该关系 模式符合第四范式。意思是如果有多值依赖一定是依赖候选键。第四范式排除了非主属性对候选键以外属性的多值依赖。另一种定义:设关系R(X,Y,Z),其中xyz是不相交的、成对的属性集合,若存在非平凡多值依赖,则意味着对R中每个属性都有函数依赖X->Ai其中X包含候选键,那么R属于第四范式。产品代理商工厂ABC原创 2020-08-19 19:06:04 · 749 阅读 · 0 评论 -
函数依赖 我懂了吗?
非平凡函数依赖、完全函数依赖、传递函数依赖、关系R上的函数依赖集合与闭包、Armstrong 公理 函数依赖集的覆盖与最小覆盖非平凡函数依赖 x->y y 不属于 x完全函数依赖 x -> y 任意X的真子集都不能->y传递函数依赖 x-> y 、y -> z =>x->z (要求均为 非平凡依赖 且 y不决定x)Armstrong 公理:自反律:x->y(平凡依赖)增广律: x->y 则xz->yz 传递律:x->y y-&g原创 2020-08-14 22:26:50 · 243 阅读 · 0 评论 -
ER图向关系模式的转化我懂了吗?
逻辑数据库设计------联系的转换、弱实体的转换、泛化与具体化实体的转换、多元联系的转换一对一联系:若联系双方均是部分参与,则定义一个新的关系,属性为联系双方的关键字属性。若一方全部参与,一方部分参与,则部分参与的一方在创建对应关系时需添加全部参与方的关键字属性。比如职工- 管理-部门 职工与部门之间的管理关系。职工全部参与、部门部分参与,那么设计表的时候就是 职工(职工号…) 部门(部门号,职工号,…)一对多联系:将单反参与的实体的关键字属性作为多方参与的实体的属性。比如职工和职工的领导关系。 就原创 2020-08-13 12:09:52 · 1237 阅读 · 0 评论 -
Indef1x 我懂了吗
Indef1x可以看做E-R图的第三种表示方法,前两种:chen 方法 crow’s foot 方法、关于实体:独立实体和从属实体独立实体:用直角方形框表示,主关键字中无外码从属实体:用圆角方形框表示,主关键字中有外码 注意从属实体的实例依赖于独立实体的实例存在关于联系:可标定联系(Identifing Connection )子实体的实例都是由它与父实体的联系确定的,父实体的主关键字是子实体的主关键字的一部分非标定联系:子实体能够被唯一标识而无需依赖别的实体。父实体的主关键字不是子实体的主关原创 2020-08-12 21:19:01 · 306 阅读 · 0 评论 -
数据库建模-ER图 我懂了吗
现实世界 抽象成为信息世界的过程即为数据建模。抽象怎么理解?8个字 理解、区分、命名、表达 。现实世界需要深刻的理解、理解的标志是区分,这就涉及到表与表的区分 表内数据的区分 数据项之间关系的区分 表关系的区分 等 、区分的标志是命名 需要命名表名、数据项名、数据表之间关系的名字 抽象的最后结果是正确表达 而我们这里用的表达方式就是ER-图。E-R模型的基本观点:世界是由一组称作实体的基本对象和这些基本对象之间的关系组成实体与实例:实体是客观存在并可相互区分的一类事物 实体有类 和个体(实例)的概念。原创 2020-08-12 11:30:46 · 2976 阅读 · 0 评论 -
数据库的事务我懂了吗(3)
两段封锁协议-一种具体的基于锁的并发控制方法读写数据之前首先要获得锁,每个事务中的加锁请求先于任何解锁请求每个事务分为加锁段和解锁段。加锁段中不能有解锁请求 解锁段中不能有加锁请求。注意两段封锁协议一定可以保证冲突可串行化。但是可能产生死锁基于时间戳的并发控制方法-除了加锁之外我们还可以通过时间戳的方法的控制并发。(基于时间戳的并发控制其实是一种基于撤回的方法)基于有效性确认的并发控制方法基于有效性确认的并发控制的方法,用RS(T) WS(T)保存读数据的集合和写数据的集合。事务分为原创 2020-08-04 16:29:43 · 186 阅读 · 0 评论 -
数据库的事务我懂了吗(2)
基于锁的并发控制方法锁是处理并发的一种手段。锁是调度器管理和使用的。0-lp 对写操作上排它锁,写操作结束后立即释放。可以防止丢失修改,允许脏读、不可重复读1-lp对写操作上排它锁,等事务结束后才释放。可以防止丢失修改、脏读 允许不可重复读错误2-lp对写操作上排它锁,等事务结束后释放,对读操作上共享锁,读操作完成后释放。防止丢失修改、脏读、不可重复读。这里我始终有个疑问:为什么通过加共享锁就可重复读呢?我们知道不可重复读是由于事务T1在事务T2修改前后读取数据不一致的情况?那么对于原创 2020-08-03 17:00:21 · 148 阅读 · 0 评论 -
数据库的事务我懂了吗(1)
事务是数据库系统提供的控制数据库操作的手段,通过这一手段,应用程序员将一个或者一组数据库操作当做一个整体操作和控制,以便数据库管理系统能够提供一致性状态转换的保证。事务在宏观上是sql语句并发执行的,而在微观上是读写操作交错执行。正是由于事务在微观上的读写操作是交错执行,所以就可能出现不一致性。这时就需要并发控制来保证事务在宏观上的完整性和一致性。并发控制就是通过正确安排基本操作 的次序。事务的原子性指的是DBMS能够保证一组事务的操作是原子性的,即要么全部成功要么全部失败。事务的一原创 2020-08-03 12:28:11 · 275 阅读 · 0 评论 -
sql优化涉及到的8个等价定律
数据库操作涉及到的5个基本操作有:并 差 积 投影 选择8个定律:投影串接定律 选择串接定律 投影和选择交换定律 选择和积的交换律 选择和并交换律 选择和差的交换律 投影和积交换律 投影和并交换律注意投影和集差不符合 交换律...原创 2020-08-02 00:30:02 · 512 阅读 · 0 评论 -
两趟扫描算法
一趟扫描算法指的是指的是通过一遍扫描就可以实现指定的数据库操作,比如选择、投影等。而对于整个关系的一元操作例如去重、分组、排序等数据库操作则需要每一个元组与所有元组比较才能确定是否重复、才能知道是否是一个新的元组、才能确定其次序,而这就需要内存。内存不够大、不能放下关系的整个元组,有没有一种解决办法呢?那就需要两趟扫描算法甚至多趟扫秒算法。两趟扫描算法 第一趟是划分子集,使得子集具有某种特性,如排序或者散列。第二趟是处理全局性的内容操作,形成结果集。基于排序的两趟扫描算法:(1)去重复操作:第原创 2020-08-01 11:00:15 · 972 阅读 · 0 评论 -
基于索引的算法
基于索引的选择算法当我们做选择操作时,假如选择条件中涉及到的属性没有索引,那么就需要将关系表中每个元组加载到内存中判断是否满足条件,如果满足输出到输出缓冲区中。如果表中查询条件中涉及到的属性有索引,那么在执行选择操作的时候,首先将索引文件加载到内存中,然后通过索引找到需要元组,然后再通过判断是否满足条件,满足后输出。具体实例:假设表R的所占磁盘块个数为1000个记录有20000个,a是R的一个属性,在a上有一个索引,现在考虑选择a= 0 的所有元组。如果使用索引并且索引是聚簇的,假设V(R,a) =.原创 2020-07-24 17:53:57 · 462 阅读 · 0 评论 -
数据库物理查询计划和迭代器算法
作为普通用户 我们最多使用的就是DML对于DDL和DCL是数据库管理员该干的事情,那么普通的select A1,A2,A3...An from R1,R2,R3...Rn where cond.SQL查询是通过词法分析和语法分析得到建立查询的分析树根据分析树得到其关系代数表达式即一个物理查询计划,然后将该物理查询计划转化为一个等价的查询时间较小的计划为每一个操作符(三类:一次单个元组 一元操作、单个关系 一元操作、多个关系 二元操作)选择实现算法并确定这些操作符的执行次序。之后.原创 2020-07-23 20:33:32 · 657 阅读 · 0 评论 -
动态散列索引
可扩展散列索引散列索引是将键值通过散列函数,将记录分布到不同的桶当中,这里的桶就指的是存储地比如磁盘块或者内存页等。而根据桶的个数是否确定,可将散列索引分为静态散列索引和动态散列索引。可扩展散列索引就是一种动态散列索引,可以根据记录的增加或者减少来修改桶的个数。可扩展散列索引中通并不是存储地,而是指向存储地的指针。散列函数将键值转化为一个N个的二进制位,将该N个二进制位的前i个表示桶的数目,比如i= 2 那么就有2^2=4个桶。现在有这样一个极端的问题,我们假设一个桶可以存储2条记录,那么假设有3条记..原创 2020-07-22 22:25:36 · 714 阅读 · 0 评论 -
B+树的插入 删除 我了解了吗
Deletion of a node in a B+ Tree:Descend to the leaf where the key exists.Remove the required key and associated reference from the node.If the node still has enough keys and references to satisfy the invariants, stopIf the node has too few keys to sat转载 2020-07-13 00:02:35 · 217 阅读 · 0 评论 -
sql中sum 我懂了吗
sql 中sum 函数的应用 众所周知 sum 可以用来对表的某一列 来求和但是 如果有这样的需求,该列满足一定的需求后才加不满足不加后来孤陋寡闻的我才知道sql中可以有if条件判断if(xx==xx,a,b)+-----------------------------+---------+| Column Name | Type |+-----------------------------+---------+| delivery_id .原创 2020-06-03 19:54:10 · 399 阅读 · 0 评论 -
数据库的完整性约束---用SQL 语言
下面代码包括 列约束 和表约束的创建和删除CREATE TABLE mystud( sid INTEGER CONSTRAINT gaojlConst CHECK(sid>=0), sname char(8) CONSTRAINT gaolSname CHECK(sname is not null), CONSTRAINT ctcc CHECK(sid >0 AND sname ='gaojl'))//在mysql 中是 drop check 其他是 drop constrai.原创 2020-06-02 23:09:41 · 646 阅读 · 0 评论 -
关系代数 数据库中的连接
等值连接 :inner join可以对同一张表进行 等值连接 不会删除重复的列外连接:左外连接 右外连接 全外连接自然连接: 自动以相等的列作为连接点 会删除重复的列原创 2020-05-31 20:38:07 · 1479 阅读 · 0 评论