




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java 线程和并发实物的特性ACID:原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可以只执行其中的一部分操作。一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。隔离性(isolation):通常来说,一个事务所做的修改在最终提交之前,对其他事务是不可见的。持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。关系型数据库的一些概念= 隔离级别
2、60; 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) =未提交读(Read uncommitted) 可能
3、60; 可能 可能已提交读(Read
4、 committed) 不可能 可能
5、 可能可重复读(Repeatable read) 不可能 不可能
6、160; 可能可串行化(Serializable ) 不可能
7、160; 不可能 不可能·未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据·提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复
8、读)·可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读·串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞用例子说明各个级别的情况: 脏读: 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第
9、一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。 幻读:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。1.3 MySQLmysql -u root -p 直接回车,无需输入密码就可以进入数据库了。/创建用户mysql> insert into mysql.user(Host,User,Pa
10、ssword) values('localhost','phplamp',password('1234');/刷新系统权限表mysql>flush privileges;这样就创建了一个名为:phplamp 密码为:1234 的用户。/退出后登录一下mysql>exit;>mysql -u phplamp -p>输入密码mysql>登录成功show create table seckillGshow databases; 显示数据库 create database name; 创建数
11、据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 显示具体的表结构 命令:show databases (注意:最后有个s)mysql> show databases;图2是一个d=2的B-Tree示意图。图2与B-Tree相比,B+Tree有以下不同点:每个节点的指针上限为2d而不是2d+1。内节点不存储data,只存储key;叶子节点不存储指针。图3是一个简单的B+Tree示意。图3MySQL存储
12、引擎介绍比较常用的是MyISAM和InnoBD MyISAM InnoDB 构成上的 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI (MYIndex)。 基于磁盘的资源是InnoDB表空间数据文件和它的
13、日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB 事务处理上 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持 InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能 SELECT UPDATE,INSERT,Delete操作 如果执行大量的SELECT,MyISAM是更好的选择 1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,
14、应该使用InnoDB表 2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用 AUTO_INCREMENT的操作 每表一个AUTO_INCREMEN列的内部处理。
15、60; MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。 AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引 更好和更快的auto_increme
16、nt处理 如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。 自动增长计数器仅被存储在主内存中,而不是存在磁盘上 表的具体行数 select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的
17、160; InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行 锁 表锁 提供行锁(locking on row level),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like “%aaa%”一、InnoDB支持事务,M
18、yISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用三、InnoDB支持外键,MyISAM不支持四、MyISAM是默认引擎,InnoDB需要指定五、InnoDB不支持FULLTEXT类型的索引六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含wher
19、e条件时MyISAM也需要扫描整个表七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'从数据结构角度1、B+树索引(O(log(n):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理2、hash索引:3、FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)4
20、、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)从逻辑角度1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值2、普通索引或者单列索引3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合4、唯一索引或者非唯一索引MySQL调优?(重点)IV Mysql软件优化 开启mysql复制,实现读写分离、负载均衡,将读的负载分摊到多个从服务器上,提高服务器的处理能力。 VI Mysql语句级优化 1.性能查的读语句,在innodb中统计行数,建议另外弄一张统
21、计表,采用myisam,定期做统计.一般的对统计的数据不会要求太精准的情况下适用。 2.尽量不要在数据库中做运算。 3.避免负向查询和%前缀模糊查询。 4.不在索引列做运算或者使用函数。 5.不要在生产环境程序中使用select * from 的形式查询数据。只查询需要使用的列。 6.查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。 7.where子句尽可能对查询列使用函数,因为对查询列使用函数用不到索引。 8.避免隐式类型转换,例如字符型一定要用,数字型一定不要使用。 9.所有的SQL关键词用
22、大写,养成良好的习惯,避免SQL语句重复编译造成系统资源的浪费。 10.联表查询的时候,记得把小结果集放在前面,遵循小结果集驱动大结果集的原则。 11.开启慢查询,定期用explain优化慢查询中的SQL语句。建索引的几大原则1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。2.=和in可以乱序,比如a = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年六安阳光电力维修工程有限责任公司招聘85人考前自测高频考点模拟试题有完整答案详解
- 2025广西农业科学院农业资源与环境研究所土壤生态与高值农业研究室公开招聘1人考前自测高频考点模拟试题有答案详解
- 不符合清算流程违反解除劳动合同7篇
- 2025年西安医学院儿童医院护理人员招聘(15人)考前自测高频考点模拟试题及1套完整答案详解
- 单位出纳工作总结15篇
- 2025广西防城港市总工会招聘编外工作人员1人模拟试卷附答案详解(突破训练)
- 2025湖南湘能多经产业(集团)有限公司高校毕业生招聘(第三批)模拟试卷附答案详解
- 2025年南平武夷山市公安局公开招聘铁骑女性警务辅助人员6人考前自测高频考点模拟试题及答案详解(夺冠)
- 2025江西赣州市会昌县小镇时代文化传媒有限公司招聘劳务派遣人员1名模拟试卷及完整答案详解一套
- 2025年金湖县事业单位公开招聘人员96人模拟试卷及答案详解(名师系列)
- 加油站装修质量管理制度
- 青少年心理健康知识教育主题班会50
- 车辆损坏和解协议书
- 《围城》介绍课件
- 2025承包商入厂安全培训考试试题及完整答案(全优)
- 零基预算改革解读
- 2024年国家体育总局事业单位招聘笔试真题
- 品控管理制度大全
- 洗衣房院感知识培训课件
- 数据库应用技术-第一次形考作业(第1章~第4章)-国开-参考资料
- T-CRHA 089-2024 成人床旁心电监测护理规程
评论
0/150
提交评论