-- 11.热门面试题
-- 资料1:https://www.cnblogs.com/bluebluesky/articles/6413831.html 分库分表原理案例
-- 1.数据库中的分页查询语句怎么写?【阿里面经】
SELECT * FROM test LIMIT 10,5;
-- 2.分库分表
-- 概念:简单来说,数据的切分就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果,即分库分表
-- 切分模式:
-- 垂直(纵向)切分:把单一的表拆分成多个表,并分散到不同的数据库(主机)上
-- 原理:垂直切分是将一张表按列切分成多个表,通常是按照列的关系密集程度进行切分,也可以利用垂直切分将经常被使用的列和不经常被使用的列切分到不同的表中。
-- 优点:
-- 1.拆分后业务清晰,拆分规则明确
-- 2.系统之间进行整合或扩展很容易
-- 3.便于实现动静分离、冷热分离的数据库表的设计模式
-- 4.便于管理、维护简单
-- 缺点:
-- 1.部分业务表无法关联(Join),只能通过接口方式解决,提高了系统的复杂度
-- 2.受每种业务的不同限制,存在单库性能瓶颈,不易进行数据扩展和提升性能
-- 3.事务处理复杂
-- 水平(横向)切分:根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上
-- 3.Exits和in谁更优
-- Exits:
/*
select * from table where exits (subquery)
理解:
该语法可以理解为:将主查询的数据,放到子查询做条件验证,根据验证结果(True/False
)来决定主查询的数据结果是否得以保留
提示:
1.Exits(subquery)只返回True或False,因此子查询中的SELECT*也可以是select 1 或select 'x'
官方说法是实际执行会忽略Select清单,因此没有区别
2.优化原则:小表驱动大表,即小数据集驱动大数据集
*/
SELECT * FROM A WHERE exits (SELECT 1 FROM B WHERE B.id = A.id)
等价于
FOR SELECT id FROM A
FOR SELECT * FROM B WHERE B.id = A.id
-- IN
SELECT * FROM A WHERE id IN (SELECT id FROM B)
等价于
FOR SELECT id FROM B
FOR SELECT * FROM A WHERE A.id = B.id
/*
结论:
当A表的数据集系小于B的数据集,用exits优于in
注意:A表和B表额id字段应建立索引
*/
-- 4.主从复制
/*
复制原理:
资料:https://www.bilibili.com/video/av21334868/?p=63
Mysql复制分为三步:
1.master将改变记录到二进制日志(binary log),这些过程叫做二进制日志事件,binary log events
2.slave将master的binary log events拷贝到它的中继日志(relay log);
3.slave重做中继日志中的事件,将改变应用到自己的数据库中,Mysql复制是异步的串行化的。
*/
MYSQL面试--热门面试题(八)
最新推荐文章于 2024-08-28 17:47:28 发布