Mysql常用知识点

0、最常用的三大范式

第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)

第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)

1、mysql的架构层次

通过概要图我们可以看到mysql的架构主要分为三层次
客户端client层、server层、存储引擎层。我们平时讲的事务、索引、锁机制等基本都是存储引擎层的。不同的存储引擎他的表现形式及实现原理都不一样。

2、执行计划

explain被称为执行计划,在语句之前增加explain关键字,mysql会在查询上设置一个标记,模拟mysql优化器来执行sql语句,执行查询时会返回执行计划的信息如下:

2.1、id

select查询序列号包含一组数字,表示查询中执行select子句或者操作表的顺序;

分为三种情况:

1、如果id相同,那么执行顺序从上至下

2、如果id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

3、id相同和不同同时存在,相同的认为一组,从上至下顺序执行,在组中id值越大优先级越高,越先执行;

2.2、select_type

SIMPLE:简单 SELECT,不需要使用 UNION 操作或子查询。
PRIMARY:如果查询包含子查询,最外层的 SELECT 被标记为 PRIMARY。
UNION:UNION 操作中第二个或后面的 SELECT 语句。
SUBQUERY:子查询中的第一个 SELECT。
DERIVED:派生表的 SELECT 子查询。

2.3、table

2.4、type

12种type的可能性

ALL < index < range < index_subquery < unique_subquery < index_merge < ref_or_null < ref_or_null < fulltext < ref < const < system

一般情况下,得保证查询至少达到range级别,最好能达到ref

2.5、possible_key

显示可能应用在这张表中的索引,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用;

2.6、key

实际使用的索引,如果为null,则没有索引

2.7、key_len

索引中使用的字节数,可以通过key_len计算查询中使用的索引长度

2.8、ref

显示索引在哪一列中被使用了,如果可能的话,是一个常数

2.9、rows

根据表的统计信息及索引使用情况,大致估计找出所需记录需要读取的行数,这个很关键,一般越少越快;

2.10、extra

额外信息

--using filesort:说明mysql无法利用索引进行排序,只能利用排序算法进行排序

--using temporary:建立临时表来保存中间结果

--using index:查询时使用覆盖索引,直接从索引中读取数据,而不用额外数据表;

--using where:使用where进行条件过滤

--using join buffer:使用连接缓存

--impossible where:where语句的结果总是false

3、索引优化

3.1、分类

一般在进行索引分类时,可分为以下几大类
1、主键索引

2、唯一索引

3、普通索引

4、全文索引

5、组合索引

3.2、回表

回表就是先通过数据库索引扫描出数据所在的行,再通过行主键id取出索引中未提供的数据

3.3、覆盖索引

索引覆盖和回表时相反的概念,在索引的叶子结点中如果能获取到查询的所有列数据,无须回表的过程叫做索引覆盖;

3.4、最左匹配

组合索引在进行查询的时候,遵循最左匹配原则,必须要先匹配第一行之后才能匹配第二列。

3.5、聚簇索引&非聚簇索引

聚簇索引:数据和对应的索引列紧凑的存储在一起

非聚簇索引:数据和索引时分开存储的

4、mysql中char和varchar有什么区别

1、char是固定长度的,而varchar是可变长度的;

2、char存储和检索效率高,而varchar存储和检索效率不高;

3、char占用存储空间,而varchar可以节省存储空间。

5、union和union all区别

  • 重复记录。UNION操作符会去除结果集中的重复行,确保最终的结果集中没有重复数据;而UNION ALL操作符会将所有的结果全部显示出来,包括重复行。
  • 排序方式。UNION操作符会对结果集进行默认规则的排序;而UNION ALL操作符不会对结果集进行排序,结果集的顺序由各个子查询的顺序决定。
  • 性能。由于UNION需要进行去重和排序操作,其性能通常低于UNION ALL;而UNION ALL由于不需要进行去重和排序,因此通常具有更好的性能。

6、InnoDB存储引擎的三种行锁算法

Record Lock:单个索引记录上的锁;

Gap Lock:间隙锁,锁定一个范围,但不包含记录本身;

Next-Key Lock:Gap Lock + Record Lock,锁定一个范围,并且锁定记录本身

InnoDB存储引擎层行锁的结构,在同一SQL语句在不同隔离级别下加锁情况是不一样的。一般情况下,部分企业为了提高并发,生产环境会采用RC隔离级别。在RR隔离级别下,对没有索引的字段进行操作时,即使查询1行记录,也都会加所有记录的Next-Key Lock,这样看来,加锁的代价较RC隔离级别还是很大的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值