MySql相关面试题


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. 分片的策略有哪些?


文章作者: 王子
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王子 !
评论
  目录