MYSQL 那点破事!索引、SQL调优、事务、B+树、分表 ....
为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于mysql数据库mysql表索引,面试官一般喜欢问哪些问题
接下来,我们逐条来看看每个问题及答案
M
大家好,我是Tom哥~ 为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于mysql数据库mysql表索引,面试官一般喜欢问哪些问题 接下来,我们逐条来看看每个问题及答案 MyISAM 和 InnoDB 的区别? 答案:InnoDB 支持 事务、外键、聚集索引,通过MVCC来支持高并发,索引和数据存储在一起。InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数。 InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁,并发能力低。MySQL 将默认存储引擎是 InnoDB mysql 锁有哪些类型? 答案:mysql锁分为共享锁( S lock ) 、排他锁 ( X lock ),也叫做读锁和写锁。根据粒度,可以分为表锁、页锁、行锁。 什么是间隙锁? 答案:间隙锁是可重复读级别下才会有的锁,mysql会帮我们生成了若干左开右闭的区间,结合MVCC和间隙锁可以解决幻读问题。 如何避免死锁? 答案:死锁的四个必要条件:1、互斥 2、请求与保持 3、环路等待 4、不可剥夺。 数据库的隔离级别? 答案:读未提交、读已提交、可重复读(mysql的默认级别,每次读取结果都一样,但是有可能产生幻读)、串行化。 Mysql有哪些类型的索引? 答案: 什么是覆盖索引和回表? 答案: 1、覆盖索引,指的是在一次查询中,一个索引包含所有需要查询的字段的值,可能是返回值或where条件
假如我们创建了一个(money,buyer_id)的联合索引,索引的叶子节点包含了buyer_id的信息,则不会再回表查询。 2、回表,指查询时一些字段值拿不到,需要到主键索引B+树再查一次。 Mysql的最左前缀原则? 答案:即最左优先,在检索数据时从联合索引的最左边开始匹配,直到遇到范围查询(如:> 、< 、between、like等) 例子:where a = 1 and b = 2 and c > 3 and d = 4 ,如果建立(a,b,c,d)组合索引,d是用不到索引的;如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。 线上SQL的调优经验? 答案: 官方为什么建议采用自增id 作为主键? 答案:自增id是连续的,插入过程也是顺序的,总是插入在最后,减少了页分裂,有效减少数据的移动。所以尽量不要使用字符串(如:UUID)作为主键。 索引为什么采用B+树,而不用B-树,红黑树? 答案:提升查询速度,首先要减少磁盘IO次数,也就是要降低树的高度。 事务的特性有哪些? 答案:ACID。 如何实现分布式事务? 答案: 日常工作中,MySQL 如何做优化? 答案: mysql 主从同步具体过程? 答案: 什么是主从延迟? 答案:指一个写入SQL操作在主库执行完后,将数据完整同步到从库会有一个时间差,称之为主从延迟。计算公式: 注意:不同服务器要保持时钟一致 主从延迟排查方法? 答案:通过 show slave status 命令输出的Seconds_Behind_Master参数的值来判断 主从延迟要怎么解决? 答案: 如果数据量太大怎么办? 答案:mysql表的数据量一般控制在千万级别,如果再大的话,就要考虑分库分表。除了分表外,列举了面对海量数据业务的一些常见优化手段 分表后ID如何保证全局唯一呢? 答案:分库分表后,多张表共用一套全局id,原来单表主键自增方式满足不了要求。我们需要重新设计一套id生成器。特点:全局唯一、高性能、高可用、方便接入。 分表后可能遇到的哪些问题? 答案:分表后,与单表的最大区别是有分表键sharding_key,用来路由具体的物理表,以电商为例,有买家和卖家两个维度,以buyer_id路由,无法满足卖家的需求,反之同样道理。如何解决? 关于我:前阿里P7技术专家,出过专利,竞赛拿过奖,CSDN博客专家,负责过电商交易、社区生鲜、互联网金融等业务,多年团队管理经验。关注公众号「微观技术」,后台回复 “算法”,免费领取资料 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |