还剩4页未读,继续阅读
文本内容:
事务的特性概念简单,但不是很好理解,主要是因为这几个特性不是一种平级关系ACID只有满足一致性,事务的执行结果才是正确的在无并发的情况下,事务串行执行,隔离性一定能够满足此时只要能满足原子性,就一定能满足一致性在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性事务满足持久性是为了能应对数据库崩溃的情况.并发一致性问题2丢失数据丢失数据乃和外两个事务都对一个数据进行修改,Ti先修改,T随后修改,T的修改覆盖了的Ti22修改简记为同时修改读脏数据读脏数据对一个数据做了修改,T读取这一个数据若执行操作,则公读取的Ti TiROLLBACK2结果和第一次的结果不一样简记为读取失败的修改最简单的场景是修改完成后,紧接着查询检验结果不可重复读不可重复读T读取一个数据,耳对该数据做了修改如果T再次读取这个数据,此时读取的结果22和第一次读取的结果不同简记为读时修改,重复读取的结果不一样幻影读幻影读读取某个范围的数据,T在这个范围内插入新的数据,再次读取这个范围的数据,此T1T12时读取的结果和和第一次读取的结果不同简记为读时插入,重复读取的结果不一样解决方案在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题产生并发不一致性问题的主要原因是破坏了事务的隔离性解决方法是通过并发控制来保证隔离性并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂数据库管理系统提供了事务的隔离级别,让用户以一种更轻松的方式处理并发一致性问题.封锁3封锁粒度中提供了两种封锁粒度行级锁以及表级锁MySQL应尽量只锁定需要修改的那部分数据,而不是所有的资源锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高但是加锁需要消耗资源,锁的各种操作包括获取锁、释放锁、以及检查锁状态都会增加系统开销因此封锁粒度越小,系统开销就越大为此,我们在选择封锁粒度时,需在锁开销和并发程度之间做一个权衡封锁类型读写锁1排它锁简写为锁,又称写锁Exclusive,X共享锁简写为锁,又称读锁Shared,S有以下两个规定一个事务对数据对象加了锁,就可以对进行读取和更新加锁期间其它事务不能对加任何A XA A锁Sdept CnameSnoGrade2Sname学生・2学院-2Mname院长-2课程100学生学院院长课程3-3-2-2-295不符合范式的关系,会产生很多异常,主要有以下四种异常冗余数据例如学生・2出现了两次修改异常修改了一个记录中的信息,但是另一个记录中相同的信息却没有被修改删除异常删除一个信息,那么也会丢失其它信息例如删除了课程需要删除第一行和第三行,那么学生的信息就会丢失-1插入异常例如想要插入一个学生的信息,如果这个学生还没选课,那么就无法插入范式范式理论是为了解决以上提到四种异常高级别范式的依赖于低级别的范式,是最低级别的范式1NF第一范式1NF属性不可分即数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性第二范式2NF每个非主属性完全函数依赖于键码可以通过分解来满足2NF分解前:Sno SnameSdept MnameCname Grade学生学院院长课程1-1-190学生学院院长课程2-2-2-2-280学生学院院长课程2-2-2-2100学生学院院长课程3-3-2-2-295以下学生课程关系中为键码,有如下函数依赖,{Sno,Cname•Sno-Sname,Sdept•Sdept-Mname•Sno,Cname-Grade函数依赖状况分析完全函数依赖于键码,它没有任何冗余数据,每个学生的每门课都有特定的成绩Grade和都部分依赖于键码,当一个学生选修了多门课时,这些数据就会出现多次,Sname,Sdept Mname造成大量冗余数据分解后关系-1:Sno SnameSdept Mname学生学院-院长1-11-1学生学院院长2-2-2-2学生学院院长3-3-2-2有以下函数依赖••Sno-Sname,Sdept•Sdept-Mname关系•-2:Sno Cname Grade1课程・190课程2-280课程2-1100课程3-295有以下函数依赖•Sno,CnameGrade第三范式()3NF非主属性不传递函数依赖于键码简而言之,第三范式就是属性不依赖于其它非主属性•上面的关系中存在以下传递函数依赖•-1Sno tSdept_Mnameo分解后关系•-
1.1:Sno SnameSdept学生学院1-1学生学院2-2-2学生学院3-3-2巴斯・科德范式(BCNF)(巴斯-科德范式)Boyce-Codd NormalForm在基础上,任何非主属性不能对主键子集依赖(在基础上消除对主码子集的依赖)3NF3NF巴斯-科德范式()是第三范式()的一个子集,即满足巴斯-科德范式()必须满BCNF3NF BCNF>足第三范式()通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二3NF范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小这也是不被称为第四范式的原因某些书上,根据范式要求的BCNF递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求实体关系图()有三个组成部分实体、属性、联系用来进行关系型数据Entity-Relationship,E-R,库系统的概念设计实体用矩形表示,矩形框内写明实体名.•属性用椭圆形表示,并用无向边将其与相应的实体连接起来•联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向,•边旁标上联系的类型(或)就是指存在的三种关系(一对
一、一对多或多对多)1…1,1…**./模型转换为关系模式的原则•ER一对一遇到一对一关系的话,在两个实体任选一个添加另一个实体的主键即可•一对多)遇到一对多关系的话,在多端添加另一端的主键•多对多遇到多对多关系的话,我们需要将联系转换为实体,然后在该实体上加上另外两个实体•的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可.索引6索引的数据结构(平衡树,)也称为多路平衡查找树,并且所有叶子节点位于同一层B-Tree BalanceTree:它不仅具有的平衡性,并且可通过顺序访问指针来提高区间查询的性能B+Tree:B-Tree在中,一个节点中的从左到右非递减排列,若某个指针的ke左右相邻分别是key7和key,B+Tree keyyi且不为则该指针指向节点的所有满足key1keyi品%null,key+1与最大区别是,的非叶子结点不保存数据,只用于索引,所有数据都保存在叶B+Tree B-Tree B+Tree子结点中而且叶子结点间按照从小到大顺序链接起来的增删改查B-Tree/B+Tree查找操作首先在根节点进行二分查找,找到一个所在的指针,然后递归地在指针所指向的节点key进行查找直到查找到叶子节点,然后在叶子节点上进行二分查找,找出所对应的key data二分查找要求表有序,正好和结点中的从左到右非递减有序排列B-Tree B+Tree key增删操作会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、旋转等操作来维护平衡性索引MySQL索引,在也称为键()是存储引擎快速找到记录的一种数据结构相当于图书的目录,可MySQL Key,根据目录中的页码快速找到所需的内容索引结构类型()索引1B+Tree索引是大多数存储引擎的默认索引类型•B+Tree MySQL因为的有序性,因此可用于部分查找、范围查找、排序和分组•B+Tree适用于全键值、键值范围和键前缀查找,其中键前缀查找只适用于最左前缀查找若不是按照索引列•的顺序进行查找,则无法使用索引索弓2Hash I索引能以时间进行查找,但是失去了有序性因此无法用于排序与分组,无法用于部分查•Hash01找和范围查找,只支持精确查找索引仅满足=,和查询,不能使用范围查询因为索引比较的是运算后的Hash INHash HashHash值,所以它只能用于等值的过滤全文索引|3全文索引使用倒排索引实现,它记录着关键词到其所在文档的映射•空间数据索引|4空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询•必须使用相关的函数来维护数据•GIS索引的优点缺点优点大大减少了服务器需要扫描的数据行数•避免服务器进行排序和分组操作,以避免创建临时表•索引是有序的,可以用于和操作临时表主要是在排序和分组B+Tree ORDERBY GROUPBY过程中创建,不需要排序和分组,也就不需要创建临时表将随机变为顺序•I/O l/Oo索引是有序的,会将相邻的数据都存储在一起B+Tree缺点索引并不是越多越好,索引固然可以提高相应的的效率,但同时也降低了及•SELECT INSERT的效率,因为或时有可能会重建索弓UPDATE INSERTUPDATE I索引的设计原则|从索引的优、缺点考虑索引的设计原则忌过度索引索引需要额外的磁盘空间,而且会降低写操作的性能•在修改表内容时,索引会进行更新甚至重构,索引列越多花销时间越长为此优化检索性能,只o保持需要的索引即可经常用在排列、分组和范围搜索的列适合创建索引,因为索引是有序的经常出现在子句的列,或是连接子句中指定的列适合创建索引WHERE JOIN使用短索引若对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间•索引的优化策略独立的列在进行查询时,索引列不能是表达式的一部分,也不能是函数参数,否则无法使用索引•多列索引在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好•索引列的顺序让选择性最强的索引列放在前面•前缀索引对于、和类型的列,必须使用前缀索引,只索引开始的部分字符•BLOB TEXTVARCHAR前缀长度的选取需要根据索引选择性来确定覆盖索引索引包含所有需要查询的字段的值具有以下优点•索引通常远小于数据行的大小,只读取索引能大大减少数据访问量一些存储引擎(例如)在内存中只缓存索引,而数据依赖于操作系统来缓存因此,O MylSAM只访问索引可以不使用系统调用(通常比较费时)索引的使用场景对于非常小的表大部分情况下简单的全表扫描比建立索弓更高效;•I对于中大型的表建立索引非常有效;•对于特大型的表建立和维护索引的代价将会随之增长这种情况下,需要用到一种技术可以直接区•分出需要查询的一组数据,而不是一条记录一条记录地匹配例如可以使用分区技术39拄勺多;藏生活中总有些东西值得分享长按二维码关注@程序员宝藏。
个人认证
优秀文档
获得点赞 0