【MySQL其他杂问题】几个常见杂问题

本问题对应的项目链接:高频题回答模版训练

PS:这块其实也问的不多,简单了解就行

1、mysql的存储引擎了解的有哪些?介绍几个

2、mysql和redis有什么区别?有啥优势劣势?

3、简单说一下 数据库三范式

4、听说过视图吗?那游标呢?介绍一下

5、介绍一下雪花算法生成id,为什么不用数据库自增?

共以下 1 个回答

  • 秊 永久会员 2023年8月16日 下午10:39

    1、mysql的存储引擎了解的有哪些?介绍几个

    常见的有 InnoDB,MyISAM,MEMORY 三种引擎。

    InnoDB 是 MySQL 5.6 以后默认的事务性存储引擎,数据存储结构为聚簇索引,也就是主键索引和数据是在同一颗 B+ 树上。同时还支持行锁,并发性能好。

    MyISAM 引擎采用的是数据和索引相分离的索引结构,但不支持事务,并且支持表级锁,并发性能较弱。

    MEMORY 引擎将数据都存在内存中,使用哈希索引来快速访问数据、同样不支持事务,也只有表级锁,一般适用于需要临时内存表的场景。

    2、mysql和redis有什么区别?有啥优势劣势?

    可以从数据库类型,性能,对事务的支持和应用场景方面讨论。

    数据库类型方面,MySQL 是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,查询效率较慢;Redis 是基于内存的 KV 型数据库,将数据存储在内存中,查询效率高。

    性能方面,由于 Redis 基于内存,并且采用单线程和基于多路复用的 IO 模型等等,读写效率要比 MySQL 高。

    对事务的支持方面,MySQL 提供了完整的事务支持,可以确保数据的一致性和完整性。而 Redis 虽然也支持事务,但 Redis 的事务失败时数据不会回滚,也就不能保证事务的原子性。

    应用场景方面,MySQL 通常用于存储大量持久化数据和进行复杂的查询和事务处理,如历史记录,余额信息等;而 Redis 更适合需要高速读写和缓存的场景,如实时排行榜,登录凭证等。

    3、简单说一下 数据库三范式

    数据库三范式的目的在于,遵从这些规范,可以使设计出来的数据库更加简洁,清晰,同时也能更好的保证一致性。

    第一范式是指,数据库表中的每一列中的值都必须是不可再分的单一数据项,比如对于 “用户” 这个字段就不符合 1NF,需要继续分解为 “用户名”,”密码”,”注册时间” 等等。

    第二范式是指,数据库表中的每条记录都要有一个唯一标识,可以被唯一的区分,也就是要有主键,其它列都完全依赖于整个主键。

    第三范式是指,所有非主键列都只依赖于主键,而不能依赖于其它非主键列,也就是所有非主键列互不依赖。

    4、听说过视图吗?那游标呢?介绍一下

    视图是一个虚拟表,它是基于一个或多个表中的数据构成的查询结果。它定义了一个虚拟表,可以对这个虚拟表进行增删改查操作。使用视图可以隐藏表的细节,简化 SQL 语句,也可以用来限制用户对底层表的访问等等。

    游标是一种数据库对象,用于在结果集上逐行对记录进行操作,常用语存储过程,触发器中。

    5、介绍一下雪花算法生成 id,为什么不用数据库自增?

    雪花算法是一种分布式 ID 生成算法,它可以生成全局唯一且递增的 ID。它的核心思想是将一个 64 位的 ID 划分成多个部分,每个部分都有不同的含义,如数据中心标识,机器标识和时间戳等等。它的优点有高性能高可用,生成 ID 时不依赖于数据库,完全在内存中完成;高吞吐,一秒钟最多能生成百万级别的自增 ID。但也有缺点,比如存在时钟回拨问题,比较依赖于多系统的时间一致性。

    尽管数据库自增 ID 是大多数情况下推荐使用的,因为它能提高数据插入的性能和索引效率,易于使用等等,但在分布式系统下,多个节点同时生成自增 ID 可能会导致冲突,并且自增 ID 可能会存在用完了的问题,这些情况下可以考虑雪花算法。

    0 赞同 0 条回复

# 回答此问题

后才能回答