Java八股文-Mysql
Mysql:
1.Mysql数据库索引的类型有哪些?
- 普通索引
- 唯一索引
- 主键索引
- 全文索引
- 组合索引
2.主键索引,唯一索引区别:
唯一索引列允许空值,而主键列不允许空值
(MySQL 允许在唯一索引列中包含多个 NULL 值,因为 NULL 被视为不同的值。)
3.mysql索引是不是越多越好?
Mysql索引不是越多越好,索引可以提高查询性能,但它们也会占用更多的存储空间,并且在插入、更新和删除数据时会增加额外的开销,因为索引也需要被更新。过多的索引可能导致性能问题,因为数据库需要更多的时间来维护这些索引。
原因:https://blog.csdn.net/yrc1314/article/details/143219772?spm=1001.2014.3001.5501
4.索引失效场景?
- 违反最左前缀法则
- 范围查询右边的列,不能使用索引
- 不要在索引列上进行运算操作, 索引将失效
- 字符串不加单引号,造成索引失效。(类型转换)
- 以%开头的Like模糊查询,索引失效
5.数据库的引擎?
- InnoDB(默认):支持事务管理,行级锁
- MyISAM:不支持事务管理,表级锁
- BDB
- Memory
- Merge
6.回表知道吗,怎么避免回表查询?
- 通过列字段查询,找到id,再通过主键索引找整行数据;
- 使用覆盖索引;避免使用select * 查询;
- 使用缓存数据库
- 数据库的隔离级别
- 读未提交
- 读已提交
- 可重复读
- 串行化
- Mysql的快照读和当前度
- 快照读:是指事务在读取数据时,读取的是该事务开始时数据的快照(Snapshot)。也就是说,事务在开始时会记录当前数据库的状态,并在整个事务期间保持一致。
- 当前读:是指事务在读取数据时,读取的是数据库的最新数据(即当前状态)。当前读会受到其他事务的修改影响。
7.SQL语句调优?
- SELECT语句务必指明字段名称(避免直接使用select * )
- SQL语句要避免造成索引失效的写法
- 尽量用union all代替union union会多一次过滤,效率低
- 避免在where子句中对字段进行表达式操作
- Join优化 能用innerjoin 就不用left join right join,如必须使用 一定要以小表为驱动,
- 内连接会对两个表进行优化,优先把小表放到外边,把大表放到里边。left join 或 right join,不会重新调整顺序
8.Mysql的MVCC?
MVCC是 MySQL 中用于实现高并发事务处理的一种机制。它允许多个事务在同一时间对同一数据进行读写操作,而不会相互干扰,从而提高数据库的并发性能。