当前位置: 首页 > news >正文

视图(View)是数据库中的一种虚拟表,它并不实际存储数据,而是基于一个 `SELECT` 查询语句动态生成的结果集

视图(View)是数据库中的一种虚拟表,它并不实际存储数据,而是基于一个SELECT查询语句动态生成的结果集。创建视图使用CREATE VIEW语句,其本质是将一条SELECT查询语句保存为一个命名对象,后续可像操作普通表一样查询该视图(支持SELECT,但对INSERT/UPDATE/DELETE有严格限制,取决于视图的定义是否可更新)。

✅ 基本语法:

CREATEVIEWview_nameASSELECTcolumn1,column2,...FROMtable_nameWHEREcondition;

📌 特点:

  • 虚拟性:不占用额外存储空间(除非是物化视图,如 PostgreSQL 的MATERIALIZED VIEW或 Oracle 的物化视图,但标准 SQL 视图默认非物化);
  • 简化复杂查询:封装多表连接、聚合、过滤等逻辑;
  • 安全性:可限制用户仅访问视图中的特定列或行,实现数据访问控制;
  • 逻辑独立性:底层表结构变化时,若视图定义兼容,应用层无需修改。

⚠️ 注意:

  • 视图上执行DML(增删改)通常要求:
    • 单表来源;
    • 不含聚合函数、DISTINCTGROUP BYHAVING、子查询(在SELECT列表或WHERE中的非简单子查询)等;
    • 所有被修改列必须直接映射到基表列,且不可为表达式或常量。

示例:

CREATEVIEWactive_usersASSELECTid,username,emailFROMusersWHEREstatus='active';

之后可直接查询:SELECT * FROM active_users;

视图(View)和物化视图(Materialized View)虽然都提供“虚拟表”式的逻辑抽象,但核心区别在于数据是否物理存储与是否自动刷新

维度普通视图(View)物化视图(Materialized View)
存储方式❌ 不存储数据;仅保存SELECT查询定义(元数据)物理存储查询结果(一张实际的数据表)
数据实时性✅ 实时:每次查询都执行底层 SQL,返回最新数据⚠️ 延迟:数据是快照,需手动或定时刷新(如REFRESH MATERIALIZED VIEW
查询性能可能较慢(尤其涉及多表连接、聚合、大数据量时,每次重算)✅ 通常更快(直接查预计算结果,支持索引、分区等优化)
更新能力大部分数据库中不可直接 DML(除非简单单表可更新视图)一般只读(PostgreSQL 默认不可写;Oracle 可配置可更新,但需满足严格条件)
存储开销极低(仅 SQL 文本)较高(占用磁盘空间,且需维护冗余数据)
标准支持✅ 所有主流 SQL 数据库(MySQL、PostgreSQL、SQL Server、Oracle)原生支持
物化视图支持❌ MySQL 原生不支持(需模拟,如用定时任务+普通表)
✅ PostgreSQL(v9.3+)、Oracle、SQL Server(索引视图)、Snowflake、BigQuery 等支持

🔹适用场景对比

  • 普通视图适用场景
    • 权限控制(如只暴露部分列/行给某用户);
    • 封装复杂查询逻辑,提升 SQL 可读性与复用性;
    • 需要强一致性的业务(如金融交易状态实时展示);
    • 数据量小或查询本身轻量,性能敏感度低。

  • 物化视图适用场景
    报表/BI 分析:频繁查询聚合结果(如日销售额、用户地域分布),且容忍分钟/小时级延迟;
    加速慢查询:对大宽表做多维聚合、连接后结果固定,避免重复计算;
    读多写少 + 网络/计算资源受限环境(如边缘分析、数据仓库分层汇总);
    • 需要为查询创建独立索引(普通视图无法建索引,而物化视图底层是真实表,可建 B-tree、BRIN、GIN 等索引)。

💡 补充说明:

  • PostgreSQL 中物化视图默认不自动刷新,需显式调用REFRESH MATERIALIZED VIEW(支持并发刷新CONCURRENTLY);
  • Oracle 的物化视图支持多种刷新模式(FAST/COMPLETE/FORCE)及自动刷新(基于ON COMMIT或定时器);
  • MySQL 用户可通过「定期INSERT INTO ... SELECT到普通表 + 事件调度器」模拟物化视图行为。
http://www.jsqmd.com/news/1151049/

相关文章:

  • 机器学习 3 大核心任务实战:从回归、分类到聚类,Python 代码全解析
  • 初心不改 为大家看好牙
  • 【SpringCloud Alibaba】Spring Boot + Spring Cloud 微服务面试核心20问
  • 基于STM32单片机宠物自动喂食系统喂水控制系统 WIFI监控宠物喂养12(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Three.js 方块着色器教程
  • 具有多孔光纤的偏振分束器
  • ddddocr vs 百度OCR:woff2 字体反爬 363 字符识别准确率与成本对比
  • 索尼相机终极解锁指南:3分钟开启隐藏的30+语言和无限录制功能
  • 基于MCP3202与PIC18的锂电池组电压平衡方案
  • 智能SQL审核系统设计:用LLM检测危险DDL并生成安全替代方案
  • AI 电动节日灯串智能驱动 MOSFET 完整选型方案
  • GEE 与 MLM 模型选择指南:3 大核心差异与 4 个纵向数据场景应用
  • 工业负载控制:TPD2017FN与PIC18F66K40的智能驱动方案
  • Vue3 KeepAlive 缓存策略:大型中后台的页面状态保持与内存管理
  • BiliDownloader技术架构解析:基于.NET 9的高性能B站视频下载引擎实现
  • PIC18F47K42与CMT-8540S-SMT蜂鸣器的DIY声音交互方案
  • 全球首发 | 云克隆猫骨骼肌细胞(SkMC)原代细胞上线,为肌肉生理、代谢调控与疾病机制研究提供种属特异工具
  • 蓝牙5.4低延迟音频方案:STM32与LC3编解码实战
  • 百考通一键生成完整任务书框架
  • 【复现】基于概率TCN-Transformer的短期光伏功率预测模型(Python代码实现)
  • 高精度ADC与MCU在工业数据采集系统中的应用
  • 高精度ADC系统设计:ADS127L11与PIC18F4680应用实践
  • ADS1262与STM32F446ZE的高精度数据采集系统设计
  • 9 款 AI 毕业论文写作工具横评,高校学术创作高效工具深度盘点
  • Windows下Claude Code终端安装避坑指南:Tabby+Node20实战
  • DDrawCompat:让经典DirectX游戏在现代Windows上重获新生的完整指南
  • VASPsol隐式溶剂模型:5分钟掌握DFT计算中的溶剂效应终极指南
  • 露易丝·海的诗歌2
  • USB 3.0 xHCI 主机控制器报错代码 10/39/43:5步精准排查与修复流程(含驱动/BIOS/注册表)
  • 学生管理信息系统:高效、便捷的学生管理工具