数据库面试题(这几道建议多查资料,不容易理解)

4.表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,以读为主,是选择拆成子表,还是继续放一起?写出理由。

拆带来的问题:连接消耗 + 存储拆分空间。
如果能容忍拆分带来的空间问题,拆的话最好和经常要查询的表的主键在物理结构上放置在一起(分区) 顺序 IO ,减少连接消耗,最后这是一个文本列再加上一个全文索引来尽量抵消连接消耗。

不拆可能带来的问题:查询性能。
如果能容忍不拆分带来的查询性能损失的话,上面的方案在某个极致条件下肯定会出现问题,那么不拆就是最好的选择。

5.MySQL有哪些存储引擎?

MySQL 提供了多种的存储引擎:

  • InnoDB
  • MyISAM
  • MRG_MYISAM
  • MEMORY
  • CSV
  • ARCHIVE
  • BLACKHOLE
  • PERFORMANCE_SCHEMA
  • FEDERATED

详细学习推荐《数据库存储引擎》

6.如何选择合适的存储引擎

提供几个选择标准,然后按照标准,选择对应的存储引擎即可,也可以根据常用引擎对比来选择你使用的存储引擎。使用哪种引擎需要根据需求灵活选择,一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎,将会提高整个数据库的性能。

  • 是否需要支持事务。
  • 对索引和缓存的支持。
  • 是否需要使用热备。
  • 崩溃恢复,能否接受崩溃。
  • 存储的限制。
  • 是否需要外键支持。

目前开发已经不考虑外键,主要原因是性能。MySQL 默认的存储引擎是 InnoDB ,并且也是最主流的选择。主要原因如下:

  • 【最重要】支持事务。
  • 支持行级锁和表级锁,能支持更多的并发量。
  • 查询不加锁,完全不影响查询。
  • 支持崩溃后恢复。

在 MySQL5.1 以及之前的版本,默认的存储引擎是 MyISAM ,但是目前已经不再更新,且它有几个比较关键的缺点:

  • 不支持事务。
  • 使用表级锁,如果数据量大,一个插入操作锁定表后,其他请求都将阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值