数据库索引以及事务的隔离

1:数据库索引的作用和优缺点,使用场景,什么时候加索引?

作用:索引是对数据库表中一列或多列的值进行排序,mysql的索引建立对于mysql的高效运行很重要,提高检索效率.数据库如同书籍,索引就是目录,根据目录查找,很快

优点:
    1.索引大大减小了服务器需要扫描的数据量,提高数据的检索效率,降低数据库的io成本
    2.通过索引对数据进行排序,降低了CPU的消耗
    3.加快表之间的连接
    4.创建唯一性索引,保证数据库每一行数据的唯一性
缺点:
    1.占用磁盘空间
    2.降低更新表的效率
    3.不利于表中数据的维护,因为对表数据CRUD的时候,索引也要动态维护.降低维护速度
    4.耗费时间(创建和维护索引)
什么时候加索引?
    1.经常需要搜索的列,可以加索引
    2.经常用在连接(join) 的列上,可以加快连接速度
    3.在经常需要排序(order by)的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
    4.在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。


数据库索引什么时候失效??
    1.如果条件有 or ,失效(要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引)
    2.使用like模糊查询 %在前面索引失效
    3.避免where子句中使用!=和<>,会导致引擎放弃索引产生全表扫描

数据库事务的四大特性?事务的隔离级别?使用场景?
    1.原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

    2.一致性(Consistency)
事务前后数据的完整性必须保持一致。
    3.
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
    4.
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

    什么是事务的隔离性?
隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。
    事务的隔离性:
    1.脏读:指一个事务读取了另外一个事务未提交的数据。
    2.不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。数据被另外一个事务修改并提交了。(这个不一定是错误,只是某些场合不对)
    3幻读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。
(一般是行影响,如下图所示:多了一行)
    
    四种隔离级别解决了上述问题


        1.读未提交(Read uncommitted):

这种事务隔离级别下,select语句不加锁。

此时,可能读取到不一致的数据,即“读脏 ”。这是并发最高,一致性最差的隔离级别。

    
    2.读已提交(Read committed):

可避免 脏读 的发生。

在互联网大数据量,高并发量的场景下,几乎 不会使用 上述两种隔离级别。

    
    3.可重复读(Repeatable read):
表示一个事务在整个过程中可以多次重复执行某个查询,且每次返回的记录都相同,除非数据被当前事务自生修改。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。

MySql默认隔离级别。

可避免 脏读 、不可重复读 的发生。

   
    4.串行化(Serializable ):

可避免 脏读、不可重复读、幻读 的发生。

以上四种隔离级别最高的是 Serializable 级别,最低的是 Read uncommitted 级别,当然级别越高,执行效率就越低。像 Serializable 这样的级别,就是以 锁表 的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读) 。

  在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读) ;而在 Oracle数据库 中,只支持Serializable (串行化) 级别和 Read committed (读已提交) 这两种级别,其中默认的为 Read committed(读已提交) 级别


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值