【MySQL】的相关面试题

面试题

  1. 数据库引擎有哪些?
    • InnoDB:这是MySQl默认的事务性存储引擎。它支持ACID事务,具有较好的性能和稳定性,适合大多数的应用场景
    • MyISAM:这是MySQL的另外一种常用存储引擎。它不支持事务,但是适用于读取密集型应用,例如数据仓库,日志系统等
    • Memory(HEAP) 这个存储引擎将数据库存储在内存当,因此具有非常告诉的读写速度。但是数据值存在于内存当中,数据库重启后数据会丢失
    • Archive:这个存储引擎主要用于存储归档数据,数据压缩存储,适合于需要大量写入和较少查询的场景
    • CSV这个存储引擎将数据以csv格式存储在文件中,适合于导入导出数据,数据交换等
    • Blcakhole:这个存储引擎会接受数据但是不存储,适用于数据备份和分发
    • Merge:这个存储引擎可以将多个MyISAM表合成一个逻辑表,方便查询
    • Federated这个存储引起可以在不同MySQL服务器之间进行数据的查询和操作
    • MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应的引擎,或者编写存储引擎。存储引擎式基于表的,而不是基于库的。所以存储引擎可称为表类型
  2. InnoDB于MyISAM有啥区别
  • 事务支持

    • innodb支持事务(ACID属性)可以使用commit和rollback等命令来控制事务的提交和回滚,这意味着innodb能够确保一组操作要么全部成功,要么全部失败回滚,确保了数据的一致性
    • myisam不支持事务每个操作都是独立的,无法回滚。因此,如果在执行一系列操作时发生错误,myisam不能确保所有的操作都成功或者失败
  • 锁定级别

    • InnoDB支持行级锁定,可以避免多个会话之间的读写冲突,并提高并发性能
    • MyISAM只支持表级锁定,这意味着党员ige会话正在对表进行读写操作的时候,其他会话无法读取或写入同一张表,降低了并发的性能
    • 外键约束
      • InnoDB支持外键约束,可以在表之间建立引用关系,并保证数据的完整性
      • MyISAM不支持外键约束,需要应用程序自定处理数据的完整性
    • 崩溃回复
      • InnoDB支持崩溃恢复和数据恢复功能,具有更好的容错型和稳定性
      • MyISAM对于崩溃恢复和数据恢复能力较弱,容易出现数据损坏或者丢失
    • 全文搜索
      • MyISAM提供了全文搜索功能,可以通过MATCH AGAINST 语法进行全文搜索的操作
      • InnoDB 在mysql5.6之后开始支持全文搜索功能
    • 空间占用
      • MyISAM的表文件和索引文件是分离的,因此可以更灵活的控制存储空间
      • InnoDB的表文件和索引文件是继承在一起了,因为会占用更多的存储空间,尤其在由大量更新和删除操作的时候。
    • 总的来说,InnoDB更适合需要事务支持,高并发支持,数据完整性的要求,而MyISAM则适合于读取密集型的应用,例如数据仓,日志系统等
  1. 存储引擎常用的命令
sql 复制代码
show engines; # 查看MySQL提供的所有存储引擎
  1. MySQL一天五万条以上的增量,预计维护三年,怎么优化?

    • 选择合适的硬件:确保数据库服务器由足够的内存,处理器,和存储资源,以处理每天的大量数据,考虑使用更高性能的硬盘和ssd来加速读写操作
    • 合理设计数据架构:通过合理设计数据库架构,包括适当表结构,索引和关系,以最大程度的提高查询性能和数据操作效率
    • 分区和分表,如果数据量非常大,考虑将表进行分区或者分表,以减少单个表的数据量, 提高查询效率和维护性
    • 合理的使用索引: 确保在经常使用的查询字段上创建索引,单避免创建按过多的索引,因为索引会增加写入操作的开销
    • 定期优化数据库,定期执行数据库优化操作,包括索引优化,表碎片整理,统计信息更新等,以确保数据库的性能和稳定性
    • 合理设置缓存,使用数据库缓存即使,如mysql的查询缓存或者应用程序层的缓存,减少对数据库的频繁信息的查询,提高响应速度
    • 监控和调优:定期监控数据库的性能指标,如cpu,内存,磁盘和网络的使用情况,并即使发现并解决性能瓶颈
    • 分布式架构:考虑使用分布式数据库架构,将数据库水平分片或者复制到多个节点,以提高数据处理能力和可用性。
    • 定期备份和恢复策略:建立定期备份和恢复策略,确保数据的安全性和可靠性,以防止数据丢失或者孙环
  2. 简述一下MySQL的内部结构

    • 链接管理器: 负责接受客户端的链接请求,管理连接池,分配会话资源
    • 查询解析器:负责收到客户端发过来的sql查询请求后,负责解析sql语句,检查语法错误,构建查询执行计划
    • 优化器:对查询执行计划进行优化, 选择最优的执行路径,以提高查询性能
    • 执行引擎:根据优化后的查询执行计划,执行sql语句,并返回给客户端
    • 存储引擎:负责管理数据库表的存储和索引,包括文件和索引文件的读写,数据库缓存,锁管理等。
    • 日志管理:负责记录数据库的操作日志
    • 缓存管理:扶额管理数据库的缓存,包括查询缓存,数据缓存,以减少对存储引擎的访问,提高查询性能
    • 事务管理器:负责事务的管理和控制,包括事务的提交回滚隔离级别的管理,保证数据的一致性和完整性
  3. 说一说你对Mysql索引的理解?

    • 索引的定义:索引是一种数据结构,用于提高数据库查询的效率,他类似于数据的目录,可以帮数据库快速定位到具有特定值的数据行,而无需完全扫描整个表
    • 索引的作用:索引主要有两个作用,一个书加快数据的检索速度,而是提高数据的排序和分组性能。通过索引,数据库可以更快的定位到需要查询的数据行,从而减少了查询所需要的时间。
    • 索引的类型:MySQL支持多种类型的索引,包括普通索引,唯一索引,主键索引,全文索引。其中,普通索引和唯一索引可以加快数据检索,逐渐索引用于唯一表示每一行的数据,全文索引用于全文搜索
    • 索引的有点:索引可以大大提高数据检索的速度,特别是对于大型表和频繁查询的表。它可以减少数据库的IO操作,降低了查询时间的复杂度,提高了数据库的性能
    • 索引的缺点:索引也有一些缺点,包括占用存储空间,增加写操作的开销印象数据的更新和删除的性能。此外过多或者不恰当的索引也可能会导致查询优化器选择错误的索引,从而降低了查询性能
    • 索引的创建:可以通过create index 语句在表上创建索引。
    • 索引的使用:数据库查询时会根据查询条件选择合适的索引进行查询优化,在编写查询语句时可以通过explain语句查询查询计划,确定是否使用了索引
    • 索引适用的常见: 索引使用于频繁的查询字段,唯一性约束的字段,排序和分组的字段等,在设计索引时,需要根据具体的业务需求和查询模式选择合适的字段进行索引。
  4. 常见的索引约束有哪些

  • 主键约束PRIMARY KEY:将索引应用于唯一标识表中每行记录的列,主键约束确保列中的值唯一且不为空,并且对应一个主键索引,可以加速对表中记录的唯一识别和访问
  • 唯一约束(unique):确保在索引列中每个值都是唯一的,但允许null值。与主键不同的是唯一约束允许索引列中存在多个null值
  • 外键约束(foreign key) 在表中创建一个列,用于引用另外一个表的主键列。外键约束确保引用表中的每个值都与被引用表中的主键值相匹配,有助于维护数据的完整性和唯一性
  • 全文索引:用于在文本字段上执行全文搜素的索引类型。全文索引可以加速对文件字段中的单词或者短语的搜索,常用于大型文本数据集中的进行全文搜索
  • 组合索引:将多列组合在一起创建索引,用于加速对多个列的组合条件查询,组合索引可以在多个列上同时提高查询性能,但是要注意选择合适的列组合和顺序以获得最佳的性能提升
  • 局部索引:只在表的部分行上船舰索引,通常用于过滤条件经常出现的列,局部索引可以减少索引的大小和维护成本,并提高查询性能.
相关推荐
师太,答应老衲吧2 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis3 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林3 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享4 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil274 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk5 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境5 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n5 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼6 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库