索引和事务

索引和事务

索引

索引是什么?

索引是对数据库表中一列或多列的值进行排序的一种结构,通过此结构我们可以大幅度的提高查找效率
索引类似字典的目录,可以通过索引快速查找目标数据

索引的分类:

  1. 普通索引: 提高查找效率
  2. 唯一性索引:索引列中的必须是唯一的 不能重复的,但是允许空值
  3. 主键索引(聚簇索引):即表中主键
  4. 全文索引:只能在char varcahr test类型上使用全文索引,并且只能在MylSAM引擎上才能使用
  5. 组合索引: 在表中的多个字段组合上创建的索引,只有在查询条件中只用了这些字段左边的字段,索引才会被使用比如:

where a=3 and b=45 and c=5 … 这种三个索引顺序使用中间没有断点,全部发挥作用;
where a=3 and c=5… 这种情况下b就是断点,a发挥了效果,c没有效果
where b=3 and c=4… 这种情况下a就是断点,在a后面的索引都没有发挥作用,这种写法联合索引没有发挥任何效果;
where b=45 and a=3 and c=5 … 这个跟第一个一样,全部发挥作用,abc只要用上了就行,跟写的顺序无关

索引的优缺点

索引的优点
  1. 大大加快了检索速度
  2. 创建的唯一索引可以保证每一行数据的唯一性
  3. 加速表与表之间的连接
  4. 在使用分组和排序子句进行`数据检索时,可以显著减少查询中分组和排序的时间
索引的缺点
  1. 占用空间内存太大
  2. 创建的速度太慢
  3. 当表中的数据进行更新时,索引也会更新(耗时)

索引的建立原则

  • 建立在不经常更新的字段上
  • j建立在数据量较大的表上
  • 建立在数据重复率低的字段上

事务

事务是什么?

事务是实际开发中,比较常见业务逻辑操作中都会存在问题,比如转账的业务,需要将一个账户的钱转向到另一个账号,此时会涉及到两个修改操作:A账户钱减少,B账户钱增加;这两个操作要保证能同时成功或者同时失败,那么这一个业务需求(逻辑单元)就称之为一个事务。

事务的四大特性

  1. 原子性 : 对于事务的执行,要么都成功,要么都失败
  2. 一致性 : 保证事务操作完成后,所有的数据结果都一致
  3. 隔离性 : 事务之间各自独立存在相互不影响
  4. 持久性 : 事务完成后,确保所有的数据长期持有久存在

事务隔离级别

由于实际的业务操作可能会涉及到很多事务的并发操作,因此在事务并发时可能会遇到以下问题:

  1. 丢失更新: 撤消一个事务时,把其它事务已提交的更新的数据覆盖了。
  2. 脏读:事务A读取了事务B更新的数据,而此时事务B并未提交,那么A读取到的数据是脏数据
  3. 不可重复读: 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新
    并提交,导致事务A多次读取同一数据时,结果 不一致。
  4. 幻读: 系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B
    就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有
    改过来,就好像发生了幻觉一样,这就叫幻读。

对于这种问题数据提供了隔离级别的解决方案
read-nucommitted 安全性最低 会发生 脏读, 不可重复读, 幻读
read committed 安全性低 会发生 不可重复读,幻读
repeatable 安全性中 只会发生幻读
serializable以上问题都不会发生 , 当然代价是效率低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值