perf: 为库存三表/BOM/物料基础表补全高频查询列索引,防止全表扫描

This commit is contained in:
DXC
2026-05-19 10:21:50 +08:00
parent c60112f5f8
commit 6e1e1aa998
5 changed files with 23 additions and 23 deletions

View File

@ -14,11 +14,11 @@ class MaterialBase(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
company_name = db.Column(db.String(255), comment='所属公司') company_name = db.Column(db.String(255), comment='所属公司')
name = db.Column(db.String(255), nullable=False, comment='名称') name = db.Column(db.String(255), nullable=False, index=True, comment='名称') # ★ 模糊搜索/精确定位高频列
common_name = db.Column(db.String(255), comment='俗名') common_name = db.Column(db.String(255), comment='俗名')
category = db.Column(db.String(100), comment='类别') category = db.Column(db.String(100), index=True, comment='类别') # ★ 分类统计/过滤高频列
material_type = db.Column(db.String(100), comment='类型') material_type = db.Column(db.String(100), index=True, comment='类型') # ★ 类型分组/过滤高频列
spec_model = db.Column(db.String(255), comment='规格型号') spec_model = db.Column(db.String(255), index=True, comment='规格型号') # ★ 模糊搜索/精确匹配高频列
unit = db.Column(db.String(50), comment='计量单位') unit = db.Column(db.String(50), comment='计量单位')
# 可见等级 # 可见等级

View File

@ -5,11 +5,11 @@ class BomTable(db.Model):
__tablename__ = 'bom_table' __tablename__ = 'bom_table'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) parent_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False, index=True) # ★ 父子件关联高频列
child_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) child_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False, index=True) # ★ 子件过滤高频列
bom_no = db.Column(db.String(100), nullable=False, comment='BOM编号') bom_no = db.Column(db.String(100), nullable=False, index=True, comment='BOM编号') # ★ Redis 缓存 Key + 列表查询核心列
version = db.Column(db.String(50), nullable=False, default='V1.0', comment='版本') version = db.Column(db.String(50), nullable=False, default='V1.0', index=True, comment='版本') # ★ 配合 bom_no 做唯一性约束
dosage = db.Column(db.Numeric(19, 4), comment='个数') dosage = db.Column(db.Numeric(19, 4), comment='个数')
loss_rate = db.Column(db.Numeric(5, 2), comment='损耗率%', default=0, nullable=True) loss_rate = db.Column(db.Numeric(5, 2), comment='损耗率%', default=0, nullable=True)

View File

@ -13,19 +13,19 @@ class StockBuy(db.Model):
__tablename__ = 'stock_buy' __tablename__ = 'stock_buy'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False, index=True) # ★ 批量 IN 查询高频列
# 身份标识 # 身份标识
sku = db.Column(db.String(100)) sku = db.Column(db.String(100), index=True) # ★ 条码/SKU 快速定位
in_date = db.Column(db.DateTime) in_date = db.Column(db.DateTime)
barcode = db.Column(db.String(100)) barcode = db.Column(db.String(100), index=True) # ★ 条码扫码查询高频列
serial_number = db.Column(db.String(100)) serial_number = db.Column(db.String(100))
batch_number = db.Column(db.String(100)) batch_number = db.Column(db.String(100))
# 状态 # 状态
status = db.Column(db.String(50), default='在库') status = db.Column(db.String(50), index=True) # ★ 在库/锁定 过滤条件
inspection_status = db.Column(db.String(50)) inspection_status = db.Column(db.String(50))
warehouse_location = db.Column(db.String(100)) warehouse_location = db.Column(db.String(100), index=True) # ★ 按库位分组/过滤
# 数量 # 数量
in_quantity = db.Column(db.Numeric(19, 4), default=0) in_quantity = db.Column(db.Numeric(19, 4), default=0)

View File

@ -12,12 +12,12 @@ class StockProduct(db.Model):
__tablename__ = 'stock_product' __tablename__ = 'stock_product'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False, index=True) # ★ 批量 IN 查询高频列
# 身份标识 # 身份标识
sku = db.Column(db.String(100)) sku = db.Column(db.String(100), index=True) # ★ SKU 快速定位
production_date = db.Column(db.DateTime) production_date = db.Column(db.DateTime)
barcode = db.Column(db.String(100)) barcode = db.Column(db.String(100), index=True) # ★ 条码扫码查询高频列
serial_number = db.Column(db.String(100)) serial_number = db.Column(db.String(100))
# 数量 # 数量
@ -26,8 +26,8 @@ class StockProduct(db.Model):
available_quantity = db.Column(db.Numeric(19, 4), default=0) available_quantity = db.Column(db.Numeric(19, 4), default=0)
# 状态与位置 # 状态与位置
status = db.Column(db.String(50)) status = db.Column(db.String(50), index=True) # ★ 在库/锁定 过滤条件
warehouse_location = db.Column(db.String(100)) warehouse_location = db.Column(db.String(100), index=True) # ★ 按库位分组/过滤
# 生产与成本 # 生产与成本
bom_code = db.Column('bom_id', db.String(100)) bom_code = db.Column('bom_id', db.String(100))

View File

@ -11,11 +11,11 @@ class StockSemi(db.Model):
__tablename__ = 'stock_semi' __tablename__ = 'stock_semi'
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False, index=True) # ★ 批量 IN 查询高频列
sku = db.Column(db.String(100)) sku = db.Column(db.String(100), index=True) # ★ SKU 快速定位
production_date = db.Column(db.DateTime) production_date = db.Column(db.DateTime)
barcode = db.Column(db.String(100)) barcode = db.Column(db.String(100), index=True) # ★ 条码扫码查询高频列
serial_number = db.Column(db.String(100)) serial_number = db.Column(db.String(100))
batch_number = db.Column(db.String(100)) batch_number = db.Column(db.String(100))
@ -25,8 +25,8 @@ class StockSemi(db.Model):
available_quantity = db.Column(db.Numeric(19, 4), default=0) available_quantity = db.Column(db.Numeric(19, 4), default=0)
# 状态与位置 # 状态与位置
status = db.Column(db.String(50)) status = db.Column(db.String(50), index=True) # ★ 在库/锁定 过滤条件
warehouse_location = db.Column(db.String(100)) warehouse_location = db.Column(db.String(100), index=True) # ★ 按库位分组/过滤
# 半成品特有字段 # 半成品特有字段
bom_code = db.Column('bom_id', db.String(100)) bom_code = db.Column('bom_id', db.String(100))