定位慢查询
SQL性能分析
索引
聚簇索引
聚簇索引与非聚簇索引,聚簇索引一般是主键索引。
索引失效
SQL优化
添加索引
- 字段值有唯一限制
- 频繁使用作为where查询条件
- 经常 group by order by列
- Distinct字段
- 区分度高的列
索引场景题
MySQL索引,现在有一个名字,性别,身份证的表,5000w数据,查询所有男性,在性别上建索引,但是仍然全表扫描,为什么?MySQL这么做的原因是什么?
答:MySQL会根据统计信息来选择索引,如果男女性别比例是1:1的话,那么使用索引可能并不会较少查询的行数,带来更快的查询速度。如果要查询的数据包括索引列之外的数据的话,在这种情况下索引可能更加耗时,因为还会涉及到回表。其次,索引是通过区分不同的值排序来实现快速查找的,如果一个字段只有两个可能的值,那么这个索引选择性很低,查询并不高效。
事务
并发事务
redo log 和 undo log
MVCC
事务隔离级别:读未提交、读已提交、可重复读、串行化
读未提交没有使用锁和MVCC,读已提交和可重复读使用了MVCC,他们两个的区别是,读已提交每次查询都需要创建一个新的readView快照,可重复读因为解决了不可重复读的问题,所以他在同一个事务中会使用相同的快照。串行化使用的是表锁。
主从同步原理
分库分表
截断表(truncate table users)与删除表(delete from users)
delete(删除)一次删除一行数据,并且将每一行被删除的数据都作为一个事务记录日志;而truncate (截断)表则回收整个数据页,只记录很少的日志项。志