mysql根据一张表的id查询另一张表的内容_MySQL高级部分理论知识细讲

本文详细介绍了数据库分区、分表、分库的概念、原理和实现方式,以及何时考虑使用这些技术。讨论了分区的优点,如提高检索效率,减少IO压力。分析了分表的场景、解决的问题和实现策略,如按用户ID拆分、范围拆分等。还探讨了分库的目的和解决的问题,以及数据分片的概念和方法。文章通过京东评论案例展示了实际应用场景,并提到了事务的ACID特性和隔离级别,以及MySQL锁机制,包括表锁、行锁和页锁的特点和使用场景。
摘要由CSDN通过智能技术生成

文章目录

一、数据库分区、分表、分库、分片

YesOk ,大家好 ,我是小刘,许久不见,甚是想念 ,小刘今天来带大家学习 分库分表地基础知识

87b316643e2ffa42d2a841f94f36f9ac.png

1.1 单机数据库的瓶颈

b220690256278da4add9c333f1e9cced.png
  • 单个表数据量越大,读写锁,插入操作重新建立索引效率越低。
  • 单个库数据量太大(一个库数据量到1T - 2T就是极限)
  • 单个数据库服务器压力过大
  • 读写速度遇到瓶颈(并发量几百)

1.2 分区

数据库分区是一种物理数据库的设计技术,它的目的是为了在特定的 SQL操作中减少数据读写的总量以缩减响应是间。

分区并不是生成新的数据库表,而是将表的数据均匀分摊到不同的硬盘,系统或不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据分摊到不同的地方,提高数据检索的效率,降低数据库频繁 IO压力值,分区的优点如下:

  1. 相对于单个文件系统或硬盘,分区可以存储更多的数据。
  2. 数据管理比较方便,如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可。
  3. 精准定位分区查询数据,不需要全表扫描查询,大大提高检索效率。
  4. 可跨多个分区磁盘查询,来提高查询的吞吐量。
  5. 在涉及聚合函数时,很容易进行数据的合并。

1.2.1 什么时候考虑使用分区?

  • 一张表的查询速度已经慢到影响使用的时候。
  • sql经过优化
  • 数据量大
  • 表中的数据是分段的
  • 对数据的操作往往只涉及一部分数据,而不是所有的数据

1.2.2 水平分区

这种形式分区是对表的行进行分区,通过这种的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分体或集体分割。所有在表中定义的列在每个数据集中都能找到,所以表的特性得以保持。

举例:一个包含十年发票记录的表可以被分区为10个不同的分区,每个分区包含的是其中一年的记录。

1.2.3 垂直分区

这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。

举例:一个包含了大 text和 blob列的表,这些 text和 blod列又不经常被访问,这时候就要把这些不经常使用的 text和 blob了划分到另一个分区,在保证它们数据关联性的同时还能提高访问速度。

1.2.4 分区实现的方式

mysql5开始支持分区功能

创建表

create table sales(id int auto increment,amount double not null,order_day datetime not null,primary key(id,order_day)) engine=Innodb

设置分区

partition by range(year(order_day))(partition p_2010 values less than (2000),partition p_2011 values less than (2011),partition p_2012 values less than (2012),partition p_2012 values less than maxvalue);

1.3 分表

1.3.1 什么时候考虑分表?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值