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

MySQL 视图使用场景与限制

视图是把查询封装成「虚拟表」的方式用对了简化查询用错了性能爆炸。这篇说说视图的用法和注意事项。什么是视图-- 视图保存好的 SQL 查询像表一样使用CREATEVIEWview_nameASSELECTcolumn1,column2FROMtableWHEREcondition;-- 使用视图SELECT*FROMview_name;视图的类型1. 简单视图单表CREATEVIEWv_active_usersASSELECTid,name,emailFROMuserWHEREstatusactive;-- 使用SELECT*FROMv_active_usersWHEREid1;2. 复杂视图多表 JOINCREATEVIEWv_order_detailsASSELECTo.idASorder_id,u.nameASuser_name,o.amount,o.status,o.created_atFROMorderoINNERJOINuseruONo.user_idu.id;-- 使用SELECT*FROMv_order_detailsWHEREuser_nameTom;3. 可更新视图CREATEVIEWv_simple_userASSELECTid,name,emailFROMuserWHEREstatusactive;-- 可以通过视图更新数据UPDATEv_simple_userSETnameTomWHEREid1;-- 视图更新会反映到原表4. 不可更新视图-- 以下情况视图不可更新-- - 聚合函数SUM, COUNT, AVG 等-- - DISTINCT-- - GROUP BY-- - HAVING-- - UNION-- - 子查询-- - JOINCREATEVIEWv_user_order_countASSELECTuser_id,COUNT(*)ASorder_countFROMorderGROUPBYuser_id;-- ❌ 错误不可更新UPDATEv_user_order_countSETorder_count10WHEREuser_id1;视图的使用场景场景1权限控制-- 创建一个只包含部分字段的视图给普通用户用CREATEVIEWv_user_publicASSELECTid,name,emailFROMuser;-- 只给这个视图的 SELECT 权限GRANTSELECTONmydb.v_user_publicTOapp_user%;-- app_user 看不到 password 字段场景2简化复杂查询-- 每次都要 JOIN 三张表直接建视图CREATEVIEWv_report_monthlyASSELECTDATE_FORMAT(o.created_at,%Y-%m)ASmonth,u.region,COUNT(DISTINCTo.user_id)ASuser_count,SUM(o.amount)AStotal_amountFROMorderoINNERJOINuseruONo.user_idu.idWHEREo.statuscompletedGROUPBYmonth,u.region;-- 报表查询变得超简单SELECT*FROMv_report_monthlyWHEREmonth2024-01;场景3兼容旧表结构-- 表结构改了但应用不想改-- 创建视图保持原有表名和字段名CREATEVIEWorderASSELECTnew_idASid,new_amountASamount,new_statusASstatusFROMorder_new;WITH CHECK OPTION防止通过视图插入或更新不符合视图条件的数据。CREATEVIEWv_active_usersASSELECTid,name,emailFROMuserWHEREstatusactiveWITHCHECKOPTION;-- ✅ 可以更新满足 WHERE 条件UPDATEv_active_usersSETnameTomWHEREid1;-- ❌ 报错尝试修改 status会被拒绝UPDATEv_active_usersSETstatusinactiveWHEREid1;-- ERROR: Check option violation视图的性能问题问题视图是「虚拟表」没有索引-- 每次查询视图都要重新执行定义里的 SQLCREATEVIEWv_order_summaryASSELECTuser_id,SUM(amount)AStotalFROMorderGROUPBYuser_id;-- 查询这个视图SELECT*FROMv_order_summaryWHEREuser_id1;-- 执行计划GROUP BY 全表-- 解决方案用物化视图MySQL 不支持用其他方案解决方案使用物化视图替代MySQL 没有原生物化视图可以用定时任务模拟-- 1. 创建汇总表CREATETABLEorder_summary_materialized(user_idBIGINTPRIMARYKEY,totalDECIMAL(10,2),updated_atDATETIME);-- 2. 定时刷新用事件或 crontabINSERTINTOorder_summary_materializedSELECTuser_id,SUM(amount),NOW()FROMorderGROUPBYuser_idONDUPLICATEKEYUPDATEtotalVALUES(total),updated_atNOW();-- 3. 查询物化表SELECT*FROMorder_summary_materializedWHEREuser_id1;查看和删除-- 查看所有视图SHOWFULLTABLESWHERETable_typeVIEW;-- 查看视图定义SHOWCREATEVIEWv_order_details;-- 查看视图列信息DESCv_order_details;-- 删除视图DROPVIEWIFEXISTSv_order_details;视图的优缺点优点缺点简化复杂查询每次查询都要重新执行权限控制没有自己的索引兼容旧表结构复杂视图性能差逻辑复用可更新视图限制多小结场景建议简化 JOIN 查询✅ 用视图权限控制✅ 用视图只暴露必要字段聚合统计❌ 别用视图用物化表复杂业务逻辑❌ 别用视图用存储过程或应用代码视图是简化工具不是性能工具。记住这一点就够了。相关阅读[MySQL 存储过程完全指南][MySQL 触发器使用场景][MySQL 性能优化实战]

相关文章:

MySQL 视图使用场景与限制

视图是把查询封装成「虚拟表」的方式,用对了简化查询,用错了性能爆炸。这篇说说视图的用法和注意事项。 什么是视图? -- 视图:保存好的 SQL 查询,像表一样使用 CREATE VIEW view_name AS SELECT column1, column2 FROM…...

dotai:将AI大模型无缝集成到Shell终端的智能助手工具

1. 项目概述:当AI遇上你的终端如果你是一个重度命令行用户,每天在终端里敲击着ls、cd、git commit这些命令,有没有那么一瞬间,希望有个助手能帮你自动补全、解释命令,甚至直接帮你写出复杂的管道操作?dotai…...

CircuitPython Web Workflow实战:无线开发Yoto Mini与I2C硬件验证

1. 项目概述与核心价值如果你玩过像树莓派Pico或者ESP32这类微控制器,肯定对“插拔-编程-调试”这个循环不陌生。每次改几行代码,就得拔下USB线,重新上电,然后盯着串口监视器看输出。这个过程在项目初期调试硬件时,尤其…...

MySQL 索引底层 B+ 树原理

聊 MySQL 索引,不讲 B 树,那就是在耍流氓。 大家好,我是乱码字符。今天咱们深入聊聊 MySQL 索引的底层数据结构——B 树。这篇文章能让你彻底搞明白,为什么有时候明明加了索引,查询却还是慢成狗。 先说说为什么要用树结…...

期权交易基础框架:模块化设计与Python实现指南

1. 项目概述:一个为期权交易者打造的“乐高积木”底座如果你在量化交易或者期权策略开发领域摸爬滚打过一段时间,大概率会遇到一个共同的痛点:策略想法很多,但把它们变成可回测、可实盘、可管理的代码,却要耗费大量的“…...

GitClaw:基于Go的轻量级Git钩子服务器与集中式权限管理方案

1. 项目概述与核心价值如果你是一名开发者,尤其是经常在团队协作中处理Git仓库的工程师,那么你一定对“权限管理”这四个字又爱又恨。爱的是它能保障代码安全,恨的是它配置起来繁琐,尤其是在处理跨项目、跨团队的复杂权限矩阵时。…...

线程化笔记工具:重塑深度思考与知识管理的技术实践

1. 项目概述:一个为线程化思考而生的笔记工具最近在折腾个人知识管理工具时,发现了一个挺有意思的开源项目:alishobeiri/thread-notebook。乍一看名字,可能会以为是又一个普通的Markdown笔记本应用。但深入使用后,我发…...

番茄小说下载器:打造属于你的个人数字图书馆终极指南

番茄小说下载器:打造属于你的个人数字图书馆终极指南 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾经遇到过这样的场景?深夜追更小说时网络突然断线&…...

如何3分钟搭建智能手机号定位系统:免费归属地查询终极指南

如何3分钟搭建智能手机号定位系统:免费归属地查询终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_…...

PowerInfer:基于热点神经元预测的LLM高性能推理引擎部署指南

1. 项目概述:当推理速度成为AI落地的瓶颈最近在折腾本地大模型推理的朋友,估计都绕不开一个核心痛点:速度。模型效果再好,生成一句话要等上十几秒,那种“卡顿感”足以劝退绝大多数想把它集成到实际应用里的开发者。我自…...

从零构建情感大语言模型:基于EmoLLM的实践指南

1. 项目概述:当大语言模型学会“察言观色”最近在折腾一个挺有意思的开源项目,叫SmartFlowAI/EmoLLM。光看名字你可能就猜到了,这玩意儿跟“情绪”和“大语言模型”有关。没错,它的核心目标就是让冷冰冰的LLM(Large La…...

构建高可用AI模型代理服务:统一接口、智能路由与生产级部署

1. 项目概述:一个无处不在的AI助手接口最近在折腾AI应用开发的朋友,可能都遇到过这样一个痛点:想在自己的项目里快速接入一个靠谱的、能处理复杂对话的AI模型,但要么被OpenAI的API调用限制和网络问题搞得焦头烂额,要么…...

移动端AI助手开发实战:混合架构、模型部署与性能优化

1. 项目概述:一个移动端AI助手的诞生 最近在移动端AI应用开发圈子里,一个名为 copaw-mobile 的项目开始引起不少同行的注意。这个由 xmingai 团队开源的项目,定位非常清晰——它要做的,就是将一个功能强大的AI助手&#xff0c…...

量化交易强化学习环境TradingGym:从Gym接口到实战策略训练

1. 项目概述:一个为量化交易策略量身定制的强化学习训练场如果你正在尝试将强化学习(Reinforcement Learning, RL)应用到股票、期货或加密货币的量化交易中,大概率会遇到一个共同的困境:环境太难搭了。市面上的回测框架…...

Godot游戏集成Discord状态:RPC插件原理与实战指南

1. 项目概述:在Godot引擎中点亮你的Discord状态 如果你是一名独立游戏开发者,或者正在用Godot引擎捣鼓一些有趣的个人项目,你可能会想让你的朋友或社区成员知道你现在正在“玩”什么。不是通过截图发到社交媒体,而是更实时、更优…...

2026生鲜店收银软件特点功能对比

每天傍晚高峰期,生鲜店门口排起的长队总是让店主心头一紧。顾客手里拿着刚挑好的蔬菜水果,眼神里透着急切,而收银台前的店员却还在手忙脚乱地查找商品代码、手动输入重量,甚至因为系统卡顿导致支付失败。这种场景不仅流失了潜在客…...

解密VideoDownloadHelper:开源浏览器插件的智能视频提取技术

解密VideoDownloadHelper:开源浏览器插件的智能视频提取技术 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 当你在浏览微博、秒拍…...

别再为嵌入式设备大内存发愁了!手把手教你用CMA(连续内存分配器)搞定Linux视频编解码缓冲区

嵌入式多媒体开发中的连续内存优化实战:CMA技术深度解析 在嵌入式多媒体开发领域,视频编解码、图像处理等任务对内存管理提出了严苛要求。当你在树莓派上部署视频监控系统,或在工业摄像头中实现实时H.264编码时,是否经常遇到这样的…...

Go语言缓存雪崩:防止缓存失效

Go语言缓存雪崩:防止缓存失效 1. 雪崩防护 type CacheWithProtection struct {cache *RedisCachemu sync.Mutexlocks map[string]*sync.Mutex }func NewCacheWithProtection(cache *RedisCache) *CacheWithProtection {return &CacheWithProtect…...

三维重建实时映射技术在智慧水利中的核心应用

三维重建实时映射技术在智慧水利中的核心应用在国家大力推进数字孪生水利建设、实现水安全精准保障的背景下,智慧水利已从传统监测、调度向全域感知、智能预判、协同处置、一屏统管升级。智慧水利的核心目标,是实现对江河湖库、灌区、泵站、堤坝、闸站等…...

基于RAG的电影智能体构建:从向量检索到Agentic设计

1. 项目概述:一个能聊电影的智能体最近在GitHub上看到一个挺有意思的项目,叫tomasonjo/llm-movieagent。光看名字,你大概能猜到,这是一个和电影、和大型语言模型(LLM)相关的智能体。简单来说,它…...

Rekall:基于时空查询的视频内容智能检索开源框架

1. 项目概述:Rekall,一个面向视频时空查询的开源利器 如果你曾经尝试过从一段长视频里,精准地找出“那个穿红色衣服的人从画面左侧走到右侧的片段”,或者想快速定位“所有出现这只特定宠物狗的镜头”,你就会知道这有多…...

从开源物理拼图游戏学习Unity 2D物理引擎与游戏架构设计

1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“openclaw-puzzle-game”。光看名字,你可能会觉得这又是一个普通的开源拼图游戏,但点进去仔细研究后,我发现它的设计思路和实现方式,对于想学习游戏开…...

Rulebook-AI:用规则引擎为AI智能体构建可控决策框架

1. 项目概述:一个基于规则的AI智能体框架最近在探索如何让AI智能体(Agent)的行为更可控、更符合业务逻辑时,我遇到了一个挺有意思的开源项目:botingw/rulebook-ai。乍一看这个名字,可能会觉得它又是一个试图…...

基于MCP协议的AI Agent远程SSH安全操作实践指南

1. 项目概述与核心价值最近在折腾AI Agent的开发,发现一个挺有意思的现象:很多开发者都卡在了“如何让AI安全、可控地操作远程服务器”这一步。你可能会想到直接给AI一个SSH私钥,但这无异于把自家大门的钥匙扔给一个还在学习走路的机器人&…...

窗口大小控制神器:3分钟掌握WindowResizer的终极窗口调整技巧

窗口大小控制神器:3分钟掌握WindowResizer的终极窗口调整技巧 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的应用程序窗口而束手无策吗?是…...

基于Sovereign-MCP-Servers构建私有AI工具链:从协议原理到Docker化部署

1. 项目概述与核心价值最近在折腾AI应用开发,特别是想给Claude、Cursor这类工具加上“联网”和“执行”能力时,绕不开一个概念:MCP(Model Context Protocol)。简单说,MCP就是一套标准协议,它能让…...

基于RAG的Obsidian智能插件:用AI对话重塑个人知识管理

1. 项目概述:当笔记遇上AI,一个插件如何重塑知识管理最近在折腾我的Obsidian知识库时,发现了一个让我眼前一亮的插件:Smart2Brain。这名字起得挺有意思,“Smart to Brain”,直译过来就是“从智能到大脑”。…...

Arm CoreLink PCK-600电源管理架构与寄存器编程详解

1. Arm CoreLink PCK-600电源控制架构解析在嵌入式系统设计中,电源管理单元(PMU)是实现高效能耗控制的核心组件。Arm CoreLink PCK-600作为业界领先的电源控制解决方案,其架构设计体现了现代SoC电源管理的先进理念。PCK-600系列采…...

深入解析go-containerregistry:无守护进程的容器镜像操作利器

1. 项目概述:容器镜像的“瑞士军刀”如果你在容器化这条路上已经走了一段时间,那么对“镜像”这个概念一定不会陌生。无论是 Docker Hub 上的nginx:latest,还是你公司私有仓库里的myapp:v1.2.3,这些镜像都是容器世界的基石。但你是…...