当前位置: 首页 > news >正文

MySQL1.0

1.数据库的三大范式

范式是为了使数据库设计更加合理,规范,减少数据冗余和数据不一致等问题指定的一系列规则。

  • 第一范式:第一范式要求数据表中的每一列都是不可分割的原子数据项。例如:有一个学生信息表,包含 “学生姓名” 和 “联系方式” 两列。如果 “联系方式” 这一列中既包含手机号码又包含电子邮箱地址,那么这个表就不符合第一范式。
  • 第二范式:如果关系模式R属于第一范式,且非主键列完全依赖于主键,而不是依赖于主键的一部分,则称R属于第二范式。
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键

2.MySQL的binlog有几种录入格式,分别有什么区别?

  • statement格式(基于SQL语句的复制):binlog 会记录每一条修改数据的 SQL 语句。但是可能出现主从数据不一致的情况
  • row格式(基于行的复制):这种格式会记录每一行数据的实际修改情况。例如,当执行UPDATE users SET age = age + 1 WHERE id = 1;时,binlog 会记录修改前用户id = 1这一行的所有数据,以及修改后的所有数据。
  • mixed格式(混合模式复制):是两种模式的混合,MySQL会根据具体的操作自动选择合适的记录方式。

3. MySQL存储引擎MyISAM与InnoDB区别?

MyISAMInnoDB
事务不支持事务   支持事务
存储结构MyISAM在磁盘上存储成三个文件,文件名和表明相同,分别为.frm(存储表定义).MYD(存储数据).MYI(存储索引)InnoDB 存储引擎的数据文件和事务日志文件存储在磁盘上。
并发控制                只支持表级锁,意味着当一个用户对表进行写操作时,整个表都会被锁住支持行级锁和表级锁,默认使用行级锁,因为它只锁住正在操作的行                           
数据恢复方面表损坏后比较容易恢复,用check table检查表的完整性,用repair table来修复损坏的表由于支持事务和日志功能,数据恢复能力更强,可以通过事务日志来保证数据的持久性和一致性
适用场景适用于对事务要求不高,以读操作为主的应用场景适用于对事务完整性要求较高,同时有大量的插入、更新和删除操作,并且存在并发访问的应用场景

 4.MyISAM索引与InnoDB索引的区别?

索引结构差异:

  • MyISAM:使用的是非聚集索引。在这种索引结构中,索引文件和数据文件是分离的,索引叶子节点存储的是指向数据记录的指针,数据存储在独立的数据文件中。
  • InnoDB:默认采用聚集索引,数据按照主键的顺序存储在B+树的叶子节点上。

索引与数据存储的关系:

  • MyISAM:由于索引和数据是分离的,在进行查询操作时,首先通过索引找到数据的指针,然后根据指针去数据文件中读取数据。
  • InnoDB:数据和索引紧密结合在聚集索引中。进行主键查询时,可以直接定位到数据所在的物理位置,效率很高。

二级索引差异:

  • MyISAM:二级索引叶子节点存储的是指向数据记录的指针,这个指针直接指向数据文件中的记录位置。所以在查询时,通过二级索引获取指针后,直接去数据文件读取数据。
  • InnoDB:二级索引叶子节点存储的是主键值和索引列的值。当通过二级索引查询数据时,先在二级索引中找到主键值,然后再通过主键值在聚集索引中查找完整的数据记录。

5.什么是索引?

索引是一种数据结构,用于快速查找和访问数据库表的数据。

工作原理

  • 以常见的B-树和B+树索引结构为例。当在数据库表中创建一个索引时,数据库管理系统会将表中的列值按照一定的顺序构建成树状结构。例如,对于一个存储用户信息的表,其中有 “用户 ID” 列,当在 “用户 ID” 列上创建索引后,数据库会把所有用户 ID 按照大小顺序构建成 B + 树结构。
  • B+树是一种平衡树,它的每个节点存储多个索引值和指向子节点的指针

类型

  • 主键索引:是一种特殊的索引,用于唯一标识表中的每一行数据。在关系型数据库中,每个表通常都有一个主键,主键索引就是基于这个主键列构建的。例如,在一个订单表中,订单 ID 是主键,主键索引可以确保每个订单 ID 都是唯一的,并且可以通过订单 ID 快速定位到对应的订单记录。
  • 唯一索引:和主键索引类似,唯一索引也要求索引列的值是唯一的,但是一个表可以有多个唯一索引,而主键索引只有一个。比如,在用户表中除了用户 ID 作为主键索引外,用户的电子邮件地址可以设置为唯一索引,以确保每个用户的电子邮件地址在表中是唯一的。
  • 普通索引:没有唯一性限制,它可以基于表中的任何列创建。普通索引主要用于提高查询性能.
  • 组合索引:是基于表中的多个列创建的索引。组合索引在查询涉及多个列条件时非常有用。

作用

  • 提高查询速度。
  • 保证数据唯一性。
  • 支持数据的排序和分组,因为索引中的数据是按照一定顺序存储的,这有助于在执行排序和分组操作时提高性能。

 6.索引的设计原则

选择合适的列创建索引

  • 频繁用于查询条件的列:如果一个列经常出现在where子句中作为查询条件,那么对该列创建索引可以显著提高查询效率。
  • 用于连接操作的列:在多表连接查询中,用于连接的列应该创建索引,可以加速连接操作的执行。
  • 用于排序和分组的列。

避免过度索引

  • 考虑索引维护成本:索引虽然能提高查询速度,但在数据插入,更新,删除操作时,数据库需要同时维护索引结构。每次数据变动可能导致索引的重新调整,这会增加额外的开销。
  • 权衡查询和维护的频率:如果在业务中,查询操作占主导地位,适当多创建一些索引可能是有益的。

使用组合索引的原则

  • 遵循最左前缀原则。
  • 选择合适的列顺序:在组合索引中,把选择性高的列放在前面。

考虑索引列的数据类型和长度

  • 数据类型的一致性:在连接操作中,用于连接的列数据类型应该保持一致。
  • 长度的适当性:对于字符类型的列创建索引,要考虑列的长度。
http://www.lryc.cn/news/496312.html

相关文章:

  • IDEA使用HotSwapHelper进行热部署
  • 简单web项目自定义部署Dockerfile
  • 基础Web安全|SQL注入
  • SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
  • C++小问题
  • avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close
  • 强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)
  • 计算机网络:IP协议详细讲解
  • 2024信创数据库TOP30之华为Gauss DB
  • 在线家具商城基于 SpringBoot:设计模式与实现方法探究
  • 九、Spring Boot集成Spring Security之授权概述
  • python之Flask入门—路由参数
  • txt地图格式处理
  • 《数据挖掘:概念、模型、方法与算法(第三版)》
  • GitLab CVE-2024-8114 漏洞解决方案
  • request和websocket
  • 一键生成后端服务,MemFire Cloud重新定义开发效率
  • 短视频矩阵的营销策略:批量混剪实现高效传播
  • 朗迪锋亮相2024人因工程与智能系统交互国际会议
  • spring boot3.3.5 logback-spring.xml 配置
  • Proteus8.17下载安装教程
  • 一次Kafka启动失败引出的问题
  • mysql 查询所有的触发器
  • 704. 二分查找 C++
  • SpringCloud Seata集成分布式事务管理 事务保护 XA AT两种模式的区别
  • node.js基础学习-querystring模块-查询字符串处理(三)
  • 电子电气架构 --- 车载网关GW连接外部IP Tester
  • 鸿蒙LiteOS的核心架构
  • C语言——实现计算房屋总价
  • 【380】基于springboot的闲置图书分享