数据库常见面试题(第一弹)
欢迎关注我的技术公众号:小谢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估计使用全表扫描要比使用索引快,则不用索引;
- 不适用键值比较少的列(重复数据多的列)
欢迎关注我的技术公众号:小谢backup

浙公网安备 33010602011771号