一、当前数据库结构问题分析
1. 订单表性能瓶颈:
- 单表数据量过大(预计年增长超千万级)
- 查询效率随数据量增加显著下降
- 缺乏有效的分区策略
2. 商品管理复杂度高:
- 商品属性分散在多个表中
- 分类层级关系处理效率低
- 价格变动历史记录不完善
3. 库存管理实时性不足:
- 高并发场景下库存超卖问题
- 库存同步机制不完善
- 缺乏多仓库库存联动管理
4. 供应链数据关联性弱:
- 供应商、采购、质检数据关联不紧密
- 物流信息与订单关联度低
- 缺乏供应链全链路追踪能力
二、优化后的数据库架构设计
1. 核心表结构优化
订单系统优化:
```sql
-- 订单主表(按时间分区)
CREATE TABLE orders (
order_id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
order_no VARCHAR(32) UNIQUE NOT NULL,
total_amount DECIMAL(12,2) NOT NULL,
status TINYINT NOT NULL DEFAULT 0,
create_time DATETIME NOT NULL,
pay_time DATETIME,
delivery_time DATETIME,
-- 其他基础字段
INDEX idx_user (user_id),
INDEX idx_status_time (status, create_time)
) PARTITION BY RANGE (TO_DAYS(create_time)) (
PARTITION p202301 VALUES LESS THAN (TO_DAYS(2023-02-01)),
PARTITION p202302 VALUES LESS THAN (TO_DAYS(2023-03-01)),
-- 后续按月分区
);
-- 订单明细表(垂直拆分)
CREATE TABLE order_items (
item_id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
sku_id BIGINT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
-- 其他商品相关字段
INDEX idx_order (order_id),
INDEX idx_product (product_id)
);
```
商品系统优化:
```sql
-- 商品主表(宽表设计)
CREATE TABLE products (
product_id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category_id BIGINT NOT NULL,
brand_id BIGINT,
barcode VARCHAR(20) UNIQUE,
base_price DECIMAL(10,2) NOT NULL,
status TINYINT NOT NULL DEFAULT 1,
create_time DATETIME NOT NULL,
update_time DATETIME NOT NULL,
-- 商品基础属性
INDEX idx_category (category_id),
INDEX idx_status (status)
);
-- 商品SKU表(支持多规格)
CREATE TABLE product_skus (
sku_id BIGINT PRIMARY KEY,
product_id BIGINT NOT NULL,
specs VARCHAR(255) NOT NULL, -- JSON格式存储规格
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
warning_stock INT NOT NULL DEFAULT 10,
INDEX idx_product (product_id)
);
-- 商品分类表(层级结构)
CREATE TABLE categories (
category_id BIGINT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
parent_id BIGINT,
level TINYINT NOT NULL,
path VARCHAR(255) NOT NULL, -- 存储完整路径如"1,2,3"
INDEX idx_parent (parent_id),
INDEX idx_path (path(20))
);
```
2. 库存管理优化
```sql
-- 实时库存表(按仓库分区)
CREATE TABLE inventory (
inventory_id BIGINT PRIMARY KEY,
sku_id BIGINT NOT NULL,
warehouse_id BIGINT NOT NULL,
total_stock INT NOT NULL DEFAULT 0,
available_stock INT NOT NULL DEFAULT 0,
locked_stock INT NOT NULL DEFAULT 0,
update_time DATETIME NOT NULL,
UNIQUE KEY uk_sku_warehouse (sku_id, warehouse_id),
INDEX idx_warehouse (warehouse_id)
) PARTITION BY LIST (warehouse_id) (
PARTITION p_wh1 VALUES IN (1),
PARTITION p_wh2 VALUES IN (2),
-- 按仓库分区
);
-- 库存变动日志(时间序列数据)
CREATE TABLE inventory_logs (
log_id BIGINT PRIMARY KEY,
sku_id BIGINT NOT NULL,
warehouse_id BIGINT NOT NULL,
change_type TINYINT NOT NULL, -- 1:入库 2:出库 3:调拨等
change_quantity INT NOT NULL,
before_stock INT NOT NULL,
after_stock INT NOT NULL,
operator_id BIGINT,
create_time DATETIME NOT NULL,
INDEX idx_sku_time (sku_id, create_time),
INDEX idx_warehouse_time (warehouse_id, create_time)
) PARTITION BY RANGE (TO_DAYS(create_time)) (
PARTITION p202301 VALUES LESS THAN (TO_DAYS(2023-02-01)),
-- 按月分区
);
```
3. 供应链数据整合
```sql
-- 供应商管理表
CREATE TABLE suppliers (
supplier_id BIGINT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
contact VARCHAR(50),
phone VARCHAR(20),
address VARCHAR(255),
status TINYINT NOT NULL DEFAULT 1,
INDEX idx_status (status)
);
-- 采购订单表
CREATE TABLE purchase_orders (
po_id BIGINT PRIMARY KEY,
po_no VARCHAR(32) UNIQUE NOT NULL,
supplier_id BIGINT NOT NULL,
total_amount DECIMAL(12,2) NOT NULL,
status TINYINT NOT NULL DEFAULT 0,
create_time DATETIME NOT NULL,
expected_delivery DATETIME,
INDEX idx_supplier (supplier_id),
INDEX idx_status_time (status, create_time)
);
-- 采购明细表
CREATE TABLE purchase_items (
item_id BIGINT PRIMARY KEY,
po_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
sku_id BIGINT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
received_quantity INT NOT NULL DEFAULT 0,
INDEX idx_po (po_id),
INDEX idx_product (product_id)
);
```
三、关键优化策略
1. 分区策略:
- 按时间分区(订单、日志表)
- 按业务维度分区(库存按仓库分区)
- 避免单表数据量过大
2. 索引优化:
- 复合索引替代单列索引
- 覆盖索引减少回表
- 定期分析索引使用情况
3. 缓存策略:
- 热点数据缓存(商品详情、库存)
- 多级缓存架构(本地缓存+分布式缓存)
- 缓存失效策略优化
4. 读写分离:
- 主库负责写操作
- 从库负责读操作
- 异步复制保证数据一致性
5. 数据归档:
- 历史订单归档
- 冷热数据分离
- 归档数据查询优化
四、实施建议
1. 分阶段实施:
- 第一阶段:核心表结构重构
- 第二阶段:索引和查询优化
- 第三阶段:缓存和分区实施
2. 数据迁移方案:
- 双写过渡期
- 增量数据同步
- 全量数据校验
3. 监控体系:
- 慢查询监控
- 连接池监控
- 锁等待监控
4. 性能测试:
- 压测方案制定
- 性能基准测试
- 优化效果验证
五、预期效果
1. 订单查询响应时间缩短60%以上
2. 库存操作并发能力提升3-5倍
3. 供应链数据查询效率提升50%
4. 系统整体可用性达到99.95%以上
5. 运维成本降低30%(通过自动化管理)
以上方案可根据快驴生鲜实际业务规模和数据量进行适当调整,建议先在测试环境验证优化效果后再逐步推广到生产环境。