MySql相关面试题

个人博客

欢迎访问个人博客: https://www.crystalblog.xyz/

备用地址: https://wang-qz.gitee.io/crystal-blog/

1. MySQL底层采用什么数据结构

2. 为什么MySQL的Innodb存储引擎必须要有主键

3. 一条SQL语句查询慢, 如何优化?

4. explain工具使用

5. Sql语句查询如何避免回表查询

6. 索引为何需要遵循最佳左侧法则?

7. like不走索引如何优化?

8. 千万级数据, 如何查询优化?

9. 如何分表分库? 分表分库后如何查询?

将一张大表的数据拆分成n张多子表数据存放. 那么一张表最多存放多少条数据呢?

阿里巴巴开发手册规范:

单表行数超过500万行或者单表容量超过2GB, 才推荐进行分表分库.

如果预计三年后的数据量根本达不到这个级别, 请不要在创建表时就分表分库.

分表分库存在缺陷, 数据如何分摊存放?

方案1: 全局且唯一, 连续的ID, ID%分表总数, 这种方式存在后期难以扩容的问题.

优点: 保证数据分摊均匀存放. 分片的字段必须保证连续性.

缺点: 后期无法扩容

方案2: 业务ID按照日期前缀生成, 按日期分表.(年,月,日)

按年分表, 会存在数据分布不均匀的问题. 可能2020年表只有100万, 2021年表有1000万数据.

可以按月分表会合理一些.

方案3: 分段形式(ID分段存储.), 支持无限扩容, 查询效率非常高. 下面以User表为例, 以500万数据进行分段:
请添加图片描述

查询语句如果没有带上分片字段, 就会去查询所有结构表的数据, 查询语句需要带上分片字段. 最好查询条件带上索引字段.

10. 分表分库后如何分页查询?

每张表分页查询数据, 交给数据库中间件(sharding-jdbc/mycat)整合后返回Limit数据给客户端.

sharding-jdbc
请添加图片描述
mycat
请添加图片描述

11. 分片的策略有哪些?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值