1. 什么是数据库索引?为什么使用索引?
索引就像书的目录,能快速找到数据位置,提高查询速度。B树索引适合范围查询,哈希索引适合等值查询。没有索引,数据库要全表扫描,很慢。
常见索引类型
主键索引:唯一不为空。
唯一索引:唯一可为空。
普通索引:无限制。
复合索引:多个字段组合,最左前缀原则ab查询用,ba不行。
2. 什么是事务?ACID特性
事务是一组原子操作,要么全成功要么全失败。
A原子性:不可分割。
C一致性:前后状态正确。
I隔离性:互不干扰。
D持久性:提交后永久保存。
3. 数据库范式详解
第一范式:原子值无重复组。
第二范式:消除部分依赖,全依赖主键。
第三范式:消除传递依赖,非主键只依赖主键。
4. InnoDB与MyISAM区别
InnoDB支持事务、外键、行锁、崩溃恢复。
MyISAM支持表锁、全文索引、速度快但不支持事务。
5. 如何优化SQL查询
避免select *,用具体字段。
加索引,避免隐式转换。
小表驱动大表。
limit分页用覆盖索引。
6. 什么是数据库锁
共享锁:读锁,可共存。
排他锁:写锁,独占。
行锁优于表锁,减少并发问题。
Q: 数据库死锁怎么解决?
A: 设置锁超时、固定锁顺序、死锁检测自动回滚。
Q: 什么是慢查询?
A: 执行超时的查询,开启slow_query_log分析优化。
Q: 分库分表怎么做?
A: 水平分表按用户ID模分,垂直分按业务模块。
Q: MySQL主从复制原理?
A: 主库binlog, slave io线程拉取,sql线程执行。