MySQL面试题系列-8

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。

mysql的全复制、半复制、异步复制

MySQL的全复制、半复制和异步复制是三种不同的数据复制策略,用于在主从数据库之间同步数据。

  1. 全复制(Full Replication):全复制是指将主数据库上的所有操作都复制到从数据库。这种复制策略适用于对数据一致性要求较高的场景,因为它可以确保从数据库与主数据库的数据完全一致。但是,全复制可能会对主数据库的性能产生影响,因为它需要记录所有操作的日志并同步到从数据库。
  2. 半复制(Semi-Replication):半复制是指只复制主数据库上的部分操作到从数据库。这种复制策略适用于对数据一致性要求较低的场景,因为它可以减少主数据库的负载。半复制可以通过配置主从数据库的过滤规则来实现,例如只复制某个数据库或某个表的数据。
  3. 异步复制(Asynchronous Replication):异步复制是指主数据库上的操作不会立即复制到从数据库,而是在一定时间间隔后进行复制。这种复制策略适用于对数据一致性要求较低,但对性能要求较高的场景。异步复制可以减少主数据库的负载,但可能会导致从数据库的数据滞后于主数据库。

总之,全复制、半复制和异步复制是MySQL提供的三种不同数据复制策略,可以根据实际需求选择合适的复制策略来平衡数据一致性和性能。

mysql半同步复制的特点

半同步复制是MySQL中一种介于异步复制和同步复制之间的数据复制机制,它结合了两者的特点以提供更好的性能和数据一致性保障。
具体来说,半同步复制的特点包括:

  1. 延迟低:与异步复制相比,半同步复制可以减少从库的数据滞后,因为主库在提交事务前需要等待至少一个从库的确认。
  2. 数据一致性:半同步复制提高了数据的一致性,因为它确保至少有一个从库接收到了来自主库的更新,从而减少了数据丢失的风险。
  3. 性能影响:虽然半同步复制增加了一些延迟,但它对性能的影响小于同步复制,因为它不需要所有从库都确认接收到更新才能完成主库上的事务。
  4. 支持性:半同步复制要求MySQL服务器支持动态加载插件,这意味着必须满足一定的服务器配置要求。
  5. 配置限制:半同步复制只支持默认的复制通道,不能配置多个复制通道。
  6. 版本要求:从MySQL 5.5版本开始,MySQL以插件的形式支持半同步复制。
  7. 适用场景:半同步复制适用于对数据一致性有较高要求,同时希望保持较好写性能的场景。
  8. 容错性:半同步复制提供了比异步复制更好的容错性,因为它确保至少有一份数据的副本被确认。
  9. 实现方式:半同步复制是通过安装特定的插件来实现的,这需要在已有的主从复制环境中进行配置。
  10. 兼容性:半同步复制可以与现有的主从复制环境兼容,无需大规模更改现有架构。
  11. 网络要求:由于涉及到主从之间的实时通信,半同步复制对网络的稳定性和延迟有一定的要求。
  12. 故障处理:在出现网络问题或从库故障时,半同步复制可以自动退化为异步复制,以保证主库的持续运行。

综上所述,半同步复制是一种平衡了性能和数据一致性的数据复制策略,适用于多种应用场景,尤其是在需要保证较高数据一致性的同时,也要考虑到写操作的性能。

drop,delete与truncate的区别

在数据库操作中,dropdelete以及truncate都可以用来删除数据,但它们在使用上有所区别。具体分析如下:

  • deletedelete是数据库的DML(Data Manipulation Language)操作语言的一部分,用于删除表中的数据。它可以通过where子句来指定条件,实现部分数据的删除。delete会走事务,执行时会触发触发器(trigger)。在InnoDB引擎中,使用delete删除数据时,表文件在磁盘上所占的空间不会变小,因为MySQL只是将删除的数据标记为已删除,并不是真正的物理删除。
  • truncatetruncate是一个快速删除表中所有数据的方法。与delete相比,它的执行速度更快,因为它不会记录每一行的删除操作,也不会触发与每行相关的触发器。truncate只删除数据,不删除表结构,包括列、约束等。使用truncate后,表的自增计数器会重置为初始值。
  • dropdrop不仅删除表中的所有数据,还会删除整个表的结构,包括表的索引、约束和触发器。此外,依赖于该表的存储过程和函数也会受到影响。drop是不可恢复的操作,一旦执行,所有的数据和表结构都将被永久删除。

总的来说,delete适用于需要删除部分数据并且可能需要触发器参与的场景;truncate适用于需要快速清空表中所有数据,但不改变表结构的场合;而drop则用于彻底删除整个表及其结构,通常在不再需要该表时使用。在实际使用中,应根据具体的数据删除需求选择合适的命令。

什么情况下应不建或少建索引

在某些特定情况下,不建或少建索引是更为合理的选择。以下是一些具体的情况:

  1. 表记录较少:如果一个表的记录非常少,例如只有几条记录,那么使用索引来查询数据可能不会带来性能上的提升。因为索引通常需要额外的磁盘空间和维护成本,而且访问索引后再访问数据表,会增加读取数据块的次数。
  2. 频繁更新的列:对于那些经常发生数据变化的列,建立索引可能会导致索引维护的成本过高。每次数据更新时,不仅需要更新记录本身,还需要更新与之相关的索引,这会降低更新操作的性能。
  3. 数据类型为BLOB或TEXT的列:由于BLOB和TEXT类型的数据通常较大,对这类数据建立索引会占用大量的存储空间,且检索效率不高,因此不建议在这些列上创建索引。
  4. 数据重复度高的列:如果一个列的数据重复度很高,即数据分布比较均匀,那么这个列上的索引效率会很低。因为索引的优势在于快速定位唯一的或范围较小的数据,而当唯一性差时,索引的效果不明显。
  5. 查询条件中用不到的字段:如果某个字段从不作为查询条件出现,那么在这个字段上建立索引是没有意义的。只有那些经常用于搜索、排序或分组的字段才适合建立索引。
  6. 高并发环境下的选择:在高并发的情况下,可能需要根据具体的业务需求和访问模式来选择合适的索引类型,比如复合索引,以优化性能。
  7. 主键自动建立唯一索引:数据库中的主键会自动建立唯一索引,因此不需要额外再为这些字段创建索引。
  8. 外键关联的字段:如果某个字段是表与表之间的外键关系,通常不需要额外创建索引,除非有特定的性能要求。
  9. 排序和分组操作的字段:如果某个字段经常用于排序或分组操作,那么在这些字段上建立索引可以显著提高操作的速度。
  10. 统计操作的字段:对于经常需要进行统计计算的字段,建立索引可以加快统计速度。
  11. 表数据量小且确定性低的表:如果一个表的数据量很小,且数据变化不大,可能不需要建立索引。

总的来说,在考虑是否建立索引时,应该综合考虑表的大小、数据的更新频率、查询模式以及性能需求等因素。不恰当的索引可能会降低数据库的整体性能,因此在上述情况下应谨慎处理索引的创建。

创建数据库表要注意什么?

在创建数据库表时,需要注意以下几个关键点:

  1. 设计原则
  • 确保表中的每一列都与主键直接相关,遵循面向对象的原则。
  • 单一职责原则,即一个表应该只负责一项业务逻辑,如果一张表承担了多个职责,应该进行拆分。
  • 字段与表直接关联,如果字段与当前表是间接关联的,应新建一张表来存储这些字段。
  • 字段最小原子化,即一个字段不应包含多个信息或含义,应当拆分成多个字段。
  • 字段名唯一且描述性强,避免单个单词形式存在,以便于理解和维护。
  1. 命名规范
  • 库名、表名、字段名全部使用小写字母,并用下划线“_”分割。
  • 名称不得超过12个字符,并且应见名知意,建议使用名词而非动词。
  1. 数据类型选择
  • 使用InnoDB存储引擎,因为它提供了事务支持和更好的性能。
  • 对于精确的浮点数,应使用DECIMAL类型而非FLOAT或DOUBLE。
  • 对于非负数值,建议使用UNSIGNED属性。
  • 当取值范围较小时,比如0-80,使用TINYINT UNSIGNED。
  • 尽量避免使用ENUM类型,可以用TINYINT代替。
  • 尽可能不使用TEXT、BLOB类型,除非必要。
  1. SQL语法
  • 在创建表时,需要定义表名、列名以及每个列的数据类型。
  • 使用正确的SQL语法,例如CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, ...);来创建一个用户表。

总的来说,创建数据库表时应遵循设计原则,注意命名规范,选择合适的数据类型,并使用正确的SQL语法。这些注意事项有助于确保数据库的可维护性、性能和扩展性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM基础

初识JAM JVM就是JAVA虚拟机,本质上是一个运行在计算机上的程序,他的职责是运行JAVA字节码文件. 下面是java代码执行过程 JVM的功能 1.解释和运行 对字节码文件中的指令实时的解释成机器码 2.内存管理 自动为对象,方法等分配内存自动的垃圾回…

基于顺序表实现通讯管理系统!(有完整源码!)

​​​​​​​ 个人主页:秋风起,再归来~ 文章专栏:C语言实战项目 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安!​​​​​​​ 目录 1、实现思路 ​…

OCm (Radeon Open Compute) 和 CUDA (Compute Unified Device Architecture)

OCm(Radeon Open Compute)和CUDA(Compute Unified Device Architecture)是两种旨在利用图形处理单元(GPU)进行通用计算的技术和框架。 OCm(Radeon Open Compute): OCm&…

CentOS 7 下离线安装RabbitMQ教程

CentOS 7 下安装RabbitMQ教程一、做准备(VMWare 虚拟机上的 CentOS 7 镜像 上安装的) (1)准备RabbitMQ的安装包(rabbitmq-server-3.8.5-1.el7.noarch)下载地址mq https://github.com/rabbitmq/rabbitmq-se…

os.listdir()bug总结

今天测试出一个神奇的bug,算是教训吧,找了两天不知道问题在哪,最后才发现问题出现在这 原始文件夹显示 os.listdir()结果乱序 import os base_path "./file/"files os.listdir(base_path)print(files)问题原因 解决办法(排序)

NB-IOT 介绍 1

1 名称介绍 NB-----Narrow Band IOT -----Internet of things NB-IOT---窄带物联网 2 物联网技术发展 以太网:网线 RS232一种串行通信标准,通常采用正负电压来表示逻辑值,如正电压表示逻辑1,负电压表示逻辑0。 RS485一种串行通…

(学习日记)2024.04.06:UCOSIII第三十四节:互斥量函数接口讲解

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

Java中的Deque

Deque 我们知道,Queue是队列,只能一头进,另一头出。 如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque /dek/。 Java集合…

excel+python学习3

继续学习台湾洪老师的pythonexcel新书代码: 1) 按区域输出EXCEL: fn data3_16.xlsx wb openpyxl.load_workbook(fn) ws wb.active range ws[A1:E9] for a, b, c, d, e in range:print(f"{a.value} {b.value} {c.value} {d.value} {e.value}…

【二分查找】Leetcode 二分查找

题目解析 二分查找在数组有序可以使用,也可以在数组无序的时候使用(只要数组中的一些规律适用于二分即可) 704. 二分查找 算法讲解 当left > right的时候,我们循环结束,但是当left和right缩成一个点的时候&#x…

大数据分析与内存计算——Spark安装以及Hadoop操作——注意事项

一、Spark安装 1.相关链接 Spark安装和编程实践(Spark3.4.0)_厦大数据库实验室博客 (xmu.edu.cn) 2.安装Spark(Local模式) 按照文章中的步骤安装即可 遇到问题:xshell以及xftp不能使用 解决办法: 在…

Node.js------Express

◆ 能够使用 express.static( ) 快速托管静态资源◆ 能够使用 express 路由精简项目结构◆ 能够使用常见的 express 中间件◆ 能够使用 express 创建API接口◆ 能够在 express 中启用cors跨域资源共享 一.初识Express 1.Express 简介 官方给出的概念:Express 是基…

AcWing 312. 乌龟棋(每日一题)

原题链接:312. 乌龟棋 - AcWing题库 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘只有一行,该行有 N 个格子,每个格子上一个分数(非负整数)。 棋盘第 1 格是唯一的起点,第…

LC 222.完全二叉树的节点个数

222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中…

拼多多商家电话采集步骤,软件使用教程详解

拼多多商家电话采集是指通过软件工具来搜索和采集拼多多平台上商家的联系电话。下面是一个拼多多商家电话采集的步骤和软件使用教程的详解: 拼多多商城代码展示需要提供具体的代码示例,以下是一个简单的拼多多商城代码展示: HTML代码&#…

[go]https://proxy.golang.org/github.com/...A connection attempt failed

go 项目库更新版本出现如下问题: Get "https://proxy.golang.org/github.com/stretchr/testify/v/v1.7.1.zip": dial tcp 142.251.43.17:443: connectex: A connection attempt failed because the connected party did not properly respond after a pe…

如何编写可读性高的 C 代码?

目录 1.引言 2.基础知识 3.面向对象语言的特性 4.C 语言的面向对象 5.测试 6.总结 1.引言 面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易…

React事件和原生事件的执行顺序

在 React 中,事件处理分为两种类型:React 合成事件(Synthetic Event)和原生 DOM 事件(Native DOM Event)。它们的执行顺序略有不同。 React 合成事件 React 合成事件的执行顺序: React 合成事件…

解决沁恒ch592单片机在tmos中使用USB总线时,接入USB Hub无法枚举频繁Reset的问题

开发产品时采用了沁恒ch592,做USB开发时遇到了一个奇葩的无法枚举问题。 典型症状 使用USB线直连电脑时没有问题,可以正常使用。 如果接入某些特定方案的USB Hub(例如GL3510、GL3520),可能会出现以下2种情况&#xf…

2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)即将召开!

2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)将2024年7月19-21日在日本福冈举行。人工智能与虚拟现实的发展对推动科技进步、促进经济发展、提升人类生活质量等具有重要意义。AIVR 2024将携手各专家学者,共同挖掘智能与虚拟的无限可能…