加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 建站 > 正文

数据库两大必备神器:索引和锁底层原理是什么!

发布时间:2018-10-17 04:09:06 所属栏目:建站 来源:Java3y
导读:副标题#e# 【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道 一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度; 表经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任

  4,索引列不能参与计算,尽量保持列“干净”。比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能使用索引,原因很简单,B+树中存储的都是数据表中的字段值,但是进行检索时,需要把所有元素都应用函数才能比较,显然这样的代价太大。所以语句要写成 : create_time = UNIX_TIMESTAMP('2016-06-06')。

  5,尽可能的扩展索引,不要新建立索引。比如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

  6,单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引。

二、锁

数据库两大必备神器:索引和锁底层原理是什么!

在mysql中的锁看起来是很复杂的,因为有一大堆的东西和名词:排它锁,共享锁,表锁,页锁,间隙锁,意向排它锁,意向共享锁,行锁,读锁,写锁,乐观锁,悲观锁,死锁。这些名词有的博客又直接写锁的英文的简写--->X锁,S锁,IS锁,IX锁,MMVC...

锁的相关知识又跟存储引擎,索引,事务的隔离级别都是关联的....

这就给初学数据库锁的人带来不少的麻烦~~~于是我下面就简单整理一下数据库锁的知识点,希望大家看完会有所帮助。

1、为什么需要学习数据库锁知识

不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下)

一般也就听过常说的乐观锁和悲观锁,了解过基本的含义之后就没了~~~

定心丸:即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的。因为这些锁数据库隐式帮我们加了:

  •  对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);
  • MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预;

只会在某些特定的场景下才需要手动加锁,学习数据库锁知识就是为了:

  •  能让我们在特定的场景下派得上用场
  •  更好把控自己写的程序
  •  在跟别人聊数据库技术的时候可以搭上几句话
  •  构建自己的知识库体系!在面试的时候不虚

2、表锁简单介绍

首先,从锁的粒度,我们可以分成两大类:

  •  表锁开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低;
  •  行锁开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高;

不同的存储引擎支持的锁粒度是不一样的:

  •  InnoDB行锁和表锁都支持!
  •  MyISAM只支持表锁!

InnoDB只有通过索引条件检索数据才使用行级锁,否则,InnoDB将使用表锁

  •  也就是说,InnoDB的行锁是基于索引的!

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读