首页 > 数据库 >MySQL的优化,三大范式和事务的四大特性

MySQL的优化,三大范式和事务的四大特性

时间:2023-09-03 21:00:44浏览次数:40  
标签:事务 范式 修改 数据库 索引 MySQL 数据 id 三大

优化
  • 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

  • 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

  • 3.应尽量避免在 where 子句中使用not in 或or或 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

  • 4.使用连接(JOIN)来代替子查询(Sub-Queries)

  • 5.事务

    • 作用是:要么语句块中每条语句都操作成功,要么都失败。可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
    • 事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。
  • 6.使用外键

  • 7.使用in和not in要慎用。

  • 8.尽量不要使用select *来查询。

  • 9.避免频繁的创建和删除临时表,以减少系统表的资源消耗

    • 建立索引的优点:

      • 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

      • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

      • 可以加速表和表之间的连接。

      • 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

    • 建立索引的缺点:

      • 建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。

      • 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。

数据库设计三大范式
  • 1.所有的域必须是原子的,字段是独立的,不可分割的
  • 2.在1的基础上,每一列和主键相关,而不是和主键部分相关
  • 3.确保每一列必须与主键直接相关,而不是间接相关,不具备传递性。
事务的四大特性(ACID)
  • 1:原子性(Atomicity)。事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行。
  • 2:隔离性(Isolation)。同一时间,只允许一个事务请求同一组数据。不同的事务彼此之间没有干扰。
  • 3:一致性(Consistency)。事务开始前和结束后,数据库的完整性约束没有被破坏 。
  • 4:持久性(Durability)。事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
并发事务产生的问题:
  • 1:脏度,一个事务读取到另一个事务未提交的数据
  • 2:不可重复读:一个事务在读取范围内多次读取数据不一致,另一事务对数据进行更改并提交;
  • 3:幻读:一个事务在读取范围内多次读取数据发现不一致,另一个事务添加或删除数据并提交。
隔离性的四种级别
  • 1: read uncommitted。事务A对数据进行修改,但未提交。此时开启事务B,在事务B中能读到事务A中对数据库进行的未提交数据的修改。PS:脏读
  • 2 :read committed。修改前和修改后两次读的结果是不一样的。(这种方式称为不可重复读。)PS:可避免脏读、不可重复读的发生。
  • 3 :repetition read可重复读。事务A对数据进行修改,但未提交,此时开启事务B,在事务B中不能读到事务A对数据库的修改。在事务A提交对数据库修改时,此时在事务B中,仍不能读到事务A对数据库的修改。(这种方式称为可重复读)但此时有一个弊端,比如我们在事务A中对数据库增加一条数据,id 为 n ,这时候我们在事务B中查询数据,此时查不到id为n的数据。但当我们在事务B中增加id为n的数据时,系统会提示id为n的数据已经存在,我们添加失败。但此时此刻,我们在事务B中仍不能查询到id为n的数据。这种方式存在一个幻读的概念。举个例子,(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后关闭事务发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。)PS:可避免脏读、不可重复读的发生。
  • 4 :serializable串行化。在开启事务A时,会产生锁表,此时别的事务会等待,等事务A结束时才会开启。PS:可避免脏读、不可重复读、幻读的发生。

标签:事务,范式,修改,数据库,索引,MySQL,数据,id,三大
From: https://www.cnblogs.com/xietingwei/p/17675571.html

相关文章

  • 力扣数据库mysql 简单题
    1.组合两张表表: Person+-------------+---------+|列名|类型|+-------------+---------+|PersonId|int||FirstName|varchar||LastName|varchar|+-------------+---------+表: Address+-------------+---------+|列名......
  • mysql
    MySQLReplication概述MySQLReplication俗称MySQLAB复制、主从复制、主从同步,是MySQL官方推荐的数据同步技术。数据同步基本过程为从数据库会实时去读取主数据库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到数据同步效果。优点:通过增加从服务器来提......
  • 在Kubernetes(K8S)上安装和部署MySQL
    摘要:本文将介绍如何在Kubernetes(K8S)上安装和部署MySQL。我们将通过以下步骤实现这一目标:准备工作、安装MySQL、配置MySQL以及在K8S上部署MySQL。通过本文,您将了解如何使用K8S来管理MySQL的容器化部署,提高应用程序的性能、可靠性和安全性。一、引言MySQL是一种流行的关系型数据库,广......
  • MysqlHelper——一个便捷的MySQL导入导出的助手类库
    MysqlHelper是一个便捷的通过PHP导入和导出Mysql数据库表结构和数据的工具,可以快速实现mysql的数据库的导入和导出.......
  • SpringBoot管理系统连接虚拟机MYSQL数据库
    1、使用Navicat软件连接虚拟机ip地址填写虚拟机的:192.168.158.129;密码填写虚拟机的mysql的密码:wingkin45;发现弹出这样一个提示框:2、在虚拟机中查看网络端口信息netstat-ntpl找到3306端口;3、在虚拟机中查看防火墙的状态systemctlstatusfirewalld没有3306端口,则就是......
  • 云服务器——安装MySQL
    镜像拉取MySQL#拉取mysql镜像,默认最新版本dockerpullmysql#默认最新版本dockerpullmysql:5.7#指定5.7版本#启动mysqldockerrun--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=root-v/root/mysql/conf.d:/etc/mysql/conf.d-v/root/mysql/data:/var/l......
  • 导出mysql数据库,导出远程mysql数据库,使用命令行导出mysql数据库
    一篇博客要使用命令行导出MySQL数据库,您可以按照以下步骤进行操作:打开命令提示符或终端窗口,并导航到MySQL的安装目录。以管理员身份运行命令行界面。在Windows操作系统上,可以按下Shift键,然后单击“开始”菜单,输入“cmd”,右键单击“命令提示符”,然后选择“以管理员身份运行”。在M......
  • MySQL一张表最多添加多少个text字段?
    1背景当用户从oracle迁移到MySQL时,可能由于原表字段太多建表不成功,这里讨论一个问题:一个InnoDB表最多能建多少个text字段。我们后续的讨论基于创建表的语句形如:createtablet(f1text,f2text,…,fNtext)engine=innodb;。1.1「默认配置」在默认配置下,上面的建表语句,N......
  • 在MySQL中插入数据后,对两个数值进行条件性增加
    在MySQL中,可以使用UPDATE语句对插入的数据进行条件性增加。以下是一个示例:假设有一个名为"table_name"的表,其中有两列"column1"和"column2",我们要对"column1"和"column2"的数据进行条件性增加。UPDATEtable_nameSETcolumn1=column1+10,column2=column2+5WHEREcon......
  • MySQL基础篇:掌握数据表操作的基础知识
    表(table)是一种结构化的文件,可以用来存储特定类型的数据,如:学生信息,课程信息,都可以放到表中。另外表都有特定的名称,而且不能重复。表中具有几个概念:列、行、主键。列叫做字段(Column),行叫做表中的记录,每一个字段都有:字段名称/字段数据类型/字段约束/字段长度创建表在MySQL中,......