说说MyBatis的优点和缺点?说说InnoDB与MyISAM的区别?SQL优化手段有哪些?并发事务带来哪些问题?

说说 MyBatis 的优点和缺点?
优点:
1 )基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响, SQL
XML 里,解除 sql 与程序代码的耦合,便于统一管理;提供 XML 标签,支持编写动态 SQL 语句,并
可重用。
2 )与 JDBC 相比,减少了 50% 以上的代码量,消除了 JDBC 大量冗余的代码,不需要手动开关连
接;
3 )很好的与各种数据库兼容(因为 MyBatis 使用 JDBC 来连接数据库,所以只要 JDBC 支持的数据
MyBatis 都支持)。
4 )能够与 Spring 很好的集成;
5 )提供映射标签,支持对象与数据库的 ORM 字段关系映射;提供对象关系映射标签,支持对象
关系组件维护。
缺点
1 SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有
一定要求。
2 SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
说说 InnoDB MyISAM 的区别 ?
1. InnoDB 支持事务, MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提
交,这样会影响速度,所以最好把多条 SQL 语言放在 begin commit 之间,组成一个事务;
2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;
3. InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。
但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该
过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,
索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM
一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
5. Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高;
 
SQL 优化手段有哪些?
1 、查询语句中不要使用 select *
2 、尽量减少子查询,使用关联查询( left join,right join,inner join )替代
3 、减少使用 IN 或者 NOT IN , 使用 exists not exists 或者关联查询语句替代
4 or 的查询尽量用 union 或者 union all 代替 ( 在确认没有重复数据或者不用剔除重复数据时,
union all 会更好 )
5 、应尽量避免在 where 子句中使用 != <> 操作符,否则将引擎放弃使用索引而进行全表扫描。
6 、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表
扫描,如: select id from t where num is null 可以在 num 上设置默认值 0 ,确保表中 num 列没有
null 值,然后这样查询: select id from t where num=0
并发事务带来哪些问题 ?
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对
同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
脏读( Dirty read : 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提
交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是
还没有提交的数据,那么另外一个事务读到的这个数据是 脏数据 ,依据 脏数据 所做的操作可
能是不正确的。
丢失修改( Lost to modify : 指在一个事务读取一个数据时,另外一个事务也访问了该数
据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务
内的修改结果就被丢失,因此称为丢失修改。 例如:事务 1 读取某表中的数据 A=20 ,事务 2
读取 A=20 ,事务 1 修改 A=A-1 ,事务 2 也修改 A=A-1 ,最终结果 A=19 ,事务 1 的修改被丢失。
不可重复读( Unrepeatableread : 指在一个事务内多次读同一数据。在这个事务还没有结
束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务
的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数
据是不一样的情况,因此称为不可重复读。
幻读( Phantom read : 幻读与不可重复读类似。它发生在一个事务( T1 )读取了几行数
据,接着另一个并发事务( T2 )插入了一些数据时。在随后的查询中,第一个事务( T1 )就会
发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。
不可重复读和幻读区别: 隔离级别
脏读
不可重复读
幻影读
READ-UNCOMMITTED
READ-COMMITTED
×
REPEATABLE-READ
×
×
SERIALIZABLE
×
×
×
不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增
或者删除比如多次读取一条记录发现记录增多或减少了。
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值