SQL视图能否存储计算结果_引入虚拟列与计算字段应用
SQL视图无法存储计算结果每次查询都会实时执行底层SELECT语句中的所有计算如需固化计算结果应使用虚拟列MySQL/PostgreSQL支持或物化视图PostgreSQL需手动刷新Oracle等支持自动刷新高频场景推荐应用层缓存。SQL视图里存不住计算结果不能。视图只是保存了 SELECT 语句的定义每次查询它数据库都重新执行一遍底层 SQL——所有计算比如 SUM()、CONCAT()、日期运算都在查询时实时算不会缓存或落盘。你看到的“计算字段”只是逻辑投影不是物理存储。哪怕视图里写了 price * quantity AS total查一万次就算一万次不省 CPU也不提速。想让计算结果“像存住一样”得用虚拟列Generated ColumnMySQL 5.7 和 PostgreSQL 12 支持虚拟列MySQL 叫 GENERATED ALWAYS ASPG 叫 STORED 或 COMPUTED它把表达式固化在表结构里查询时可直接读取STORED 类型还支持索引。常见错误是以为加个视图就能替代物化效果结果发现排序、JOIN、WHERE 条件全慢——其实该加的是表级虚拟列 索引MySQL 示例ALTER TABLE orders ADD COLUMN total_amount DECIMAL(10,2) GENERATED ALWAYS AS (price * quantity) STORED;PostgreSQL 示例ALTER TABLE orders ADD COLUMN total_amount DECIMAL(10,2) GENERATED ALWAYS AS (price * quantity) STORED;注意MySQL 的 STORED 虚拟列可建索引VIRTUAL 则每次查都重算和视图没区别虚拟列不能引用子查询或非确定性函数如 NOW()、RAND()否则建表失败真要缓存计算结果别硬扛用物化视图或应用层缓存PostgreSQL 9.3 原生不支持物化视图自动刷新需手动 REFRESH MATERIALIZED VIEWOracle、SQL Server、Doris、StarRocks 才有较成熟的自动刷新机制。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2511253.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!