数据库常见面试题(第一弹)
 doctorrm      2021-05-31 23:54:38      263      0      

欢迎关注我的个人公众号:小谢backup

1、数据库如何优化性能?

SQL优化

加缓存

分库分表

读写分离

系统配置优化、硬件优化

2、索引的缺点

索引一般比较大,存在磁盘中,占空间而且IO操作多了会耗时。

对表记录写操作时,对有索引字段需要调整索引,耗时。

3、索引分类?(逻辑角度)

主键索引

唯一索引

普通索引

多列索引

空间索引

4、数据库并发造成的读问题有哪些?

脏读

不可重复读

幻读

5、如何解决数据库的并发读问题?

读提交

可重复读

序列化

6、InnoDB(默认)和MyISAM的区别

  • InnoDB支持行锁;
  • InnoDB支持事务处理,MyISAM不支持事务,回滚将造成不完整回滚,无原子性;
  • InnoDB支持外键,MyISAM不支持外键;
  • InnoDB不支持全文索引,MyISAM支持全文索引;
  • InnoDB不保存表的具体行数,而是通过扫描表来计算多少行;MyISAM则保持了表的具体行数,不带where时直接返回保存的行数;
  • InnoDB在删表时是一行一行的删除记录;MyISAM删表时,先drop表,然后再重建表;
  • InnoDB把数据和索引存放在表空间中;MyISAM表被存放在三个文件中,frm文件存放表定义,数据文件是MYD,索引文件是MYI;
  • InnoDB跨平台可以直接使用;MyISAM跨平台很难直接copy;
  • InnoDB中必须包含AUTO_INCREMENT类型字段的索引;MyISAM中可以使用AUTO_INCREMENT类型的字段建立联合索引;
  • InnoDB中表格很难被压缩;MyISAM中表格可以被压缩;
  • InnoDB适用于系统读少、写多,尤其是高并发的时候;MyISAM相对简单,效率更高,若系统读多、写少,对原子性要求低,可以用MyISAM且恢复速度快,可直接用备份覆盖恢复。

7、分库分表有哪两种方法?

垂直拆分

水平拆分

8、如何保证主从数据库之间的数据一致?

基于二进制日志复制

9、读写分离的路由规则如何实现?

硬编码

数据库中间件

CQRS

10、索引失效场景

  • like的模糊查询以%开头时索引会失效;
  • 应该尽量避免在where字句中使用!=或者<>操作符,否则存储引擎将放弃使用索引而进行全表扫描;
  • 应该尽量避免在where子句中用or来连接条件,否则索引失效;
  • 对于多列索引(联合索引),比如(A,B,C),如果没有命中第一个(如B,C或者C),那索引失效;
  • 如果列的类型是字符串,那一定要在条件中将数据用引号引用起来,否则不会使用索引;
  • 应该避免在where字句中对字段进行表达式操作,比如select id from t where num/2=10;应该改为select id from t where num=100*2;
  • 不能在where字句中对字段进行函数操作,否则索引失效;
  • 不要在where字句中的”=”左边进行函数、算术运算符或其它表达式运算,否则索引失效;
  • 如果Mysql估计使用全表扫描要比使用索引快,则不用索引;
  • 不适用键值比较少的列(重复数据多的列)
去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

正在跳转到PayPal...

发表评论