彻底搞清mysql分库分表(垂直分库,垂直分表,水平分库,水平分表)

 

1. 垂直分库(Vertical Sharding)

定义: 垂直分库是指将不同的表或表的一部分分配到不同的数据库实例中。每个数据库实例只包含部分表,从而分散了数据和负载。
应用场景:
  • 功能模块分离:将不同功能模块的数据存储在不同的数据库中。例如,用户信息存储在一个数据库中,订单信息存储在另一个数据库中。
  • 性能优化:通过分散数据和负载,减少单个数据库的负载,提高性能。
  • 安全性:将敏感数据和非敏感数据分开存储,提高安全性。
示例: 假设有一个电商系统,可以将用户信息表(users)和订单信息表(orders)分别存储在两个不同的数据库实例中:
  • user_db:存储用户信息表(users)。
  • order_db:存储订单信息表(orders)。

 

2. 垂直分表(Vertical Partitioning)

定义: 垂直分表是指将一个表的列分成多个表,每个表只包含部分列。这样可以减少单个表的宽度,提高查询性能。
应用场景:
  • 减少表宽度:当一个表包含大量列时,查询时可能只需要部分列,通过垂直分表可以减少表的宽度,提高查询性能。
  • 提高索引效率:通过将高频查询的列和低频查询的列分开,可以提高索引的效率。
示例: 假设有一个用户信息表(users),包含以下列:
  • user_id
  • username
  • email
  • address
  • phone
  • created_at
  • updated_at
可以将这个表垂直分成两个表:
  • users_basic:存储 user_idusernameemail
  • users_detail:存储 user_idaddressphonecreated_atupdated_at

 

3. 水平分库(Horizontal Sharding)

定义: 水平分库是指将表的数据行分配到不同的数据库实例中。每个数据库实例包含表的一部分行,从而分散了数据和负载。
应用场景:
  • 数据量大:当单个数据库实例无法处理大量数据时,可以将数据分散到多个数据库实例中。
  • 高并发:通过分散数据和负载,提高系统的并发处理能力。
示例: 假设有一个订单信息表(orders),包含大量订单数据。可以将订单数据按用户ID的哈希值分配到不同的数据库实例中:
  • order_db_1:存储用户ID哈希值为0-9999的订单。
  • order_db_2:存储用户ID哈希值为10000-19999的订单。
  • 以此类推。

 

4. 水平分表(Horizontal Partitioning)

定义: 水平分表是指将表的数据行分成多个表,每个表只包含部分行。这样可以减少单个表的数据量,提高查询性能。
应用场景:
  • 数据量大:当单个表的数据量过大时,查询性能会下降,通过水平分表可以减少单个表的数据量。
  • 时间序列数据:对于时间序列数据,可以按时间范围分表,例如按年、按月分表。
示例: 假设有一个订单信息表(orders),包含大量订单数据。可以将订单数据按时间范围分成多个表:
  • orders_2023:存储2023年的订单。
  • orders_2024:存储2024年的订单。
  • 以此类推。

总结

  • 垂直分库:按功能模块或数据类型将表分配到不同的数据库实例中。
  • 垂直分表:将一个表的列分成多个表,减少表的宽度。
  • 水平分库:按数据行将表的数据分配到不同的数据库实例中。
  • 水平分表:将一个表的数据行分成多个表,减少单个表的数据量。

 

 

相关连接:

https://zhuanlan.zhihu.com/p/98392844 ...............................搞清mysql分库分表(垂直分库,垂直分表,水平分库,水平分表

posted on 2025-08-20 15:39  chen_2987  阅读(61)  评论(0)    收藏  举报

导航