Q1、mysql数据库是关系型数据库
Q2、存储引擎是InnoDB、MYISAM
Q3、InnoDB与MyISAM的区别?
Q3、索引有哪些类型,区别又是什么?
Q3、索引失效的场景
Q4、索引结构和存储方式?
MySQL的索引使用的是B+Tree。但是存储内容与存储引擎有关
主键和数据一起存放的叫做聚簇索引,不在一起存放的叫做非聚簇索引
Q5、数据库事务
事务的特性
Q6、并发事务带来的问题
Q7、事务的集中隔离级别
并发事务存在的问题
MySQL中默认的隔离级别是:RR。但是也保证了事务的ACID特性。实现原理是锁 + MVCC机制
RR下怎么保证不会幻读
快照读:由MVCC机制保证不出现幻读
当前读:使?Next-Key Lock加锁保证不出现幻读, Next-Key Lock 是?锁(Record Lock)和间隙锁
(Gap Lock)的结合,?锁只能锁住已经存在的?,为了避免插?新?,需要依赖间隙锁。
Q9、数据库锁的类型
Q1、binlog日志,是server端的日志
主要用于主从数据同步,记录的模式包括:statement、mixed、row(默认)
Q2、redolog日志,是存储引擎层的日志
主要用户崩溃数据修复。mysql实例在挂了或者宕机后,会使用存储引擎中的redo log日志来恢复数据
实例会将磁盘中的redo log加载到buffer pool中恢复,同时在事务操作数据时,通过刷盘机制,来保证buffer pool中的redo log同步到磁盘中。默认是事务提交时刷一次
redo log 有3种刷盘策略:
默认情况下是=1。每次事务提交时都执?刷盘操作InnoDB引擎后台有?个线程,每隔1s,会把 redo log buffer 中的内容写到?件系统缓存,然后调?fsync刷盘
当 redo log buffer 占?的空间即将达到 innodb_log_buffer_size ?半的时候,后台线程会主动刷盘
Q3、redo log和binlog都是保证数据修改的一致性,怎么确保
事务的特性
原子性:事务中的sql语句,要么都执行,要么都不执行。底层使用undo log机制实现
一致性:数据的逻辑关系保持一致
隔离性:一个事务和另一个事务之间的数据是隔离的。MVCC实现隔离性,
持久性:事务提交的变更要持久化到磁盘中。底层使用redo log机制实现
原子性实现的原理
undo log机制实现
每行数据除了业务数据,还有修改当前数据的事务id,指向上一次修改的快照数据的指针,连接成一个链表;
insert产生的undo log在事务提交之后就会删除;
update、delete产生的undo log需要保存到undo log链表中以供后面MVCC机制使用
隔离级别包括哪些
并发事务存在的问题
RR级别怎么实现
RR级别是指可重复读,也就是在事务内对于一条数据,多次读取获得的结果都是一样的,原理是采用了MVCC机制+间隙锁
RR级别怎么做到的可重复读
①、每行数据的隐藏字段:最后一次变更改行的事务id;回滚指针:指向该行数据的undo log
②、ReadView结构:当前事务id、当前数据库中活跃的事务id列表、可见的事务id界限
③、事务可见性算法:在事务第一个select
语句开始之前创建ReadView
,记录当前活跃的事务id列表,在读取数据过程中,通过可见性算法判断读取的数据
InnoDB支持崩溃可修复的原理
MySQL分为server端、存储引擎两部分
①、单表数量不能超过500w;
②、TEXT、BLOB类型的字段存储:TEXT一般存储长文本字符串;varchar(n) n代表的是字符数;text(m)m代表的是字节数
Q2、SQL语句突然执行的很慢怎么解决?
show processlist
查看explain sql 语句
如果字段没有添加索引可以依据业务逻辑判断是否需要添加
如果字段有索引没用上,那就是导致索引失效,有这么几种原因:
查询使用了函数、查询时进行了列运算、查询时字段有类型转换、查询时未按照最左匹配、模糊查询中%在前面、使用了is not null
没有建立索引Q、查看数据库表索引的命令
show index from table_xxx
1、<font color=blue>深分页导致的性能问题</font>
select .... limit x,y
语句的时候where条件如果是<font color=Red>非聚簇索引</font>>,那么会有回表的动作;同时limit语句的底层是查询到【0 - x+y】条都查出来,然后截取y条返回,所以会出现【0 - x】无用的扫描select from table_name where xxx >、=、< (select a.id from table_name where yyy limit x, 1)limit 10
select ... from table_name where id > lastMaxId order by id limit 10
2、建索引的原则
3、遇到的SQL问题
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。