数据库脚本处理,加辅助计算字段,你了解吗?

15 阅读2分钟

今天是2026年01月18日,在这里祝大家周末好,周末快乐!我是一名IT技术人员,拥有多年数据库系统设计、开发与运维经验,专注于 MySQL 和 Microsoft SQL Server 两大主流数据库平台。擅长高性能SQL编写、复杂查询优化、索引策略设计、数据迁移与灾备方案实施。熟悉数据库性能监控、故障排查与安全加固,能够为企业提供稳定、高效、可扩展的数据存储解决方案。

在实际项目中,我主导过多个大型系统的数据库架构设计与优化工作,成功将关键业务查询响应时间降低70%以上,并通过自动化脚本提升运维效率。同时具备良好的跨团队协作能力,能与开发、运维及业务部门紧密配合,确保数据平台的稳定性与可靠性。今天与大家一起聊聊的是数据库,在处理业务时,写脚本,常用到的一种方法,那就是计算字段。

举个例子,一个表A,存储有一个字段,如:goods_code,它存储的值类似CN_20250001、CN_20250002,我们用条件去查这个字段值时,往往直接传20250001、20250002这样的值。正常的做法,它就要进行变量拼接,如mysql 语法 goods_code=concat('CN_','20250001'),这样一来,字段索引goods_code 可能就失效,因为带有计算。还有一种就是进行截断 substring(goods_code,3,length(goods_code )-2)='20250001',这种也是属于计算,索引也会失效。对于大表数据来讲,全量扫描,那性能肯定不会好。于是,常见的方式,就是在这个表,加一个计算字段,做法为:

-- 添加虚拟计算列

ALTER TABLE A 

ADD COLUMN goods_code_no_pre VARCHAR(100) 

GENERATED ALWAYS AS (SUBSTRING(goods_code, 3, LENGTH(goods_code) - 2)) 

STORED;

-- 或者使用 VIRTUAL(默认,不存储物理数据)

-- ALTER TABLE A 

-- ADD COLUMN goods_code_no_pre VARCHAR(100) 

-- AS (SUBSTRING(goods_code, 3, LENGTH(goods_code) - 2));

这样加了这列后,数据也不用自己去主动添加和修改,自动依据公式触发获得,再加上索引,这样用这个字段来做查询条件,性能就大大得到提高。