MySQL視圖高級應用與最佳實踐

1. 視圖與索引的協同優化??
  • ??物化視圖(模擬實現)??
    MySQL原生不支持物化視圖,但可通過“定時刷新”的物理表模擬:

    -- 1. 創建存儲結果的物理表
    CREATE TABLE cached_monthly_sales (product_id INT,total_sales DECIMAL(10,2),PRIMARY KEY (product_id)
    );-- 2. 使用存儲過程定期刷新數據
    DELIMITER //
    CREATE PROCEDURE refresh_cached_sales()
    BEGINTRUNCATE TABLE cached_monthly_sales;INSERT INTO cached_monthly_salesSELECT product_id, SUM(amount)FROM ordersWHERE order_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)GROUP BY product_id;
    END //
    DELIMITER ;-- 3. 通過事件或外部工具定時調用存儲過程

    ??優點??:顯著提升復雜聚合查詢的性能。
    ??缺點??:數據非實時,需權衡業務需求。

  • ??索引視圖(間接優化)??
    若視圖查詢涉及固定條件,可為基表的關鍵字段建立索引:

    -- 示例:為視圖的WHERE條件字段創建索引
    CREATE INDEX idx_user_status ON users(status);

??2. 視圖與存儲過程/觸發器的結合??
  • ??場景:自動更新視圖關聯數據??
    通過觸發器實現基表變更時更新視圖依賴的統計結果:
    -- 示例:當訂單表插入數據時,更新物化視圖的統計值
    DELIMITER //
    CREATE TRIGGER after_order_insert
    AFTER INSERT ON orders
    FOR EACH ROW
    BEGINCALL refresh_cached_sales(); -- 調用刷新物化視圖的存儲過程
    END //
    DELIMITER ;
    ??適用場景??:高實時性要求的統計看板。

??3. 視圖的動態參數化(變通實現)??

MySQL視圖不支持直接傳遞參數,但可通過函數或會話變量模擬:

  • ??方法1:使用用戶變量??

    -- 1. 設置用戶變量
    SET @filter_dept_id = 2;-- 2. 創建視圖引用該變量
    CREATE VIEW dynamic_employee_view AS
    SELECT id, name
    FROM employees
    WHERE dept_id = @filter_dept_id;-- 3. 查詢前修改變量值
    SET @filter_dept_id = 3;
    SELECT * FROM dynamic_employee_view;

    ??缺點??:變量作用域為會話級,可能引發并發問題。

  • ??方法2:通過函數封裝??

    -- 1. 創建函數接收參數
    CREATE FUNCTION get_employees_by_dept(dept_id INT)
    RETURNS SQL SECURITY INVOKER
    RETURN (SELECT id, nameFROM employeesWHERE dept_id = dept_id
    );-- 2. 通過函數調用模擬參數化視圖
    SELECT * FROM get_employees_by_dept(3);

    ??優點??:邏輯更清晰,支持復用。


??4. 視圖的嵌套與執行計劃分析??
  • ??嵌套視圖的風險??
    多層視圖可能導致查詢優化器難以生成高效執行計劃。
    ??示例問題??:
    -- 視圖1:基礎過濾
    CREATE VIEW view1 AS
    SELECT id, name FROM users WHERE status = 'active';-- 視圖2:基于視圖1的聚合
    CREATE VIEW view2 AS
    SELECT name, COUNT(*) AS order_count
    FROM view1
    JOIN orders ON view1.id = orders.user_id
    GROUP BY name;-- 查詢視圖2時,可能生成復雜的執行計劃
    EXPLAIN SELECT * FROM view2;
    ??優化建議??:
    • 使用EXPLAIN分析執行計劃,確保索引有效利用。
    • 減少嵌套層數,盡量將復雜邏輯下沉到基表查詢。

??5. 視圖在分庫分表中的應用??
  • ??場景:跨分片查詢聚合??
    通過視圖整合多個分片表的數據(需業務層支持):
    -- 示例:合并2023年各月份的分表數據
    CREATE VIEW orders_2023 AS
    SELECT * FROM orders_2023_01
    UNION ALL
    SELECT * FROM orders_2023_02
    ...
    UNION ALL
    SELECT * FROM orders_2023_12;
    ??注意??:
    • 查詢性能可能較差,需配合分區表或中間件(如ShardingSphere)。
    • 適用于低頻的跨分片數據分析。

??6. 視圖的替代方案與對比??
  • ??臨時表(Temporary Table)??
    ??適用場景??:單次會話中的復雜中間結果存儲。
    ??缺點??:數據不持久,無法跨會話共享。

  • ??通用表表達式(CTE)??
    MySQL 8.0+支持CTE,可替代簡單嵌套視圖:

    WITH regional_sales AS (SELECT region, SUM(amount) AS totalFROM ordersGROUP BY region
    )
    SELECT * FROM regional_sales WHERE total > 1000;

    ??優點??:邏輯更直觀,支持遞歸查詢。


??總結:視圖的最佳實踐??

  1. ??適度使用??

    • 優先用于簡化查詢和權限控制,避免過度嵌套。
    • 高頻或高性能需求場景慎用視圖。
  2. ??性能監控??

    • 定期使用EXPLAIN分析視圖查詢的執行計劃。
    • 監控慢查詢日志,識別低效視圖。
  3. ??與業務解耦??

    • 視圖應作為數據訪問層,不承載核心業務邏輯。
    • 復雜邏輯優先考慮存儲過程或應用層實現。
  4. ??文檔化??

    • 記錄視圖的用途、基表依賴及刷新機制,便于團隊協作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77705.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

string的模擬實現 (6)

目錄 1.string.h 2.string.cpp 3.test.cpp 4.一些注意點 本篇博客就學習下如何模擬實現簡易版的string類&#xff0c;學好string類后面學習其他容器也會更輕松些。 代碼實現如下&#xff1a; 1.string.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include <…

Unity:像素(Pixels) 和 單位(Units)

目錄 從第一性原理出發&#xff1a;什么是像素和 Unit&#xff1f; &#x1f9f1; 1. 像素&#xff08;Pixel&#xff09;&#xff1a;圖像的最小單位 &#x1f4d0; 2. Unity Unit&#xff08;單位&#xff09;&#xff1a;游戲世界中的度量單位 核心換算公式&#xff1a;…

【失敗總結】Win10系統安裝docker

1.啟用或關閉windows功能中&#xff0c;將Hyper-V功能勾選全部啟用&#xff0c;容器勾選。設置好后要重啟電腦。 2.管網下載下載安裝Docker  Docker官網&#xff1a;https://www.docker.com/ 3.可以自定義Docker安裝路徑 新建安裝目錄&#xff1a;d:\MySoftware\Docker并將D…

《Adaptive Layer-skipping in Pre-trained LLMs》- 論文筆記

作者&#xff1a;Xuan Luo, Weizhi Wang, Xifeng Yan Department of Computer Science, UC Santa Barbara xuan_luoucsb.edu, weizhiwangucsb.edu, xyancs.ucsb.edu 1. 引言與動機 1.1 背景 LLM 的成功與挑戰: 大型語言模型 (LLMs) 在翻譯、代碼生成、推理等任務上取得巨大成…

DQN在Gym的MountainCar環境的實現

DQN on MountainCar 引言 在本次實驗里&#xff0c;我構建了DQN和Dueling DQN&#xff0c;并在Gymnasium庫的MountainCar環境中對它們展開測試。我通過調整訓練任務的超參數&#xff0c;同時設計不同的獎勵函數及其對應參數&#xff0c;致力于獲取更優的訓練效果。最后&#…

計算機網絡綜合實驗指南

計算機網絡綜合實驗指南 本實驗將結合《計算機網絡自頂向下》前三章的核心概念&#xff0c;通過實際操作加深對應用層、運輸層和網絡層的理解。實驗涵蓋 HTTP/TCP抓包分析、DNS解析觀察、網頁性能評估及簡單Socket編程&#xff0c;幫助你將理論轉化為實踐。 實驗準備 工具&…

【AI部署】騰訊云GPU-RUN—SadTalker的AI數字人視頻—未來之窗超算中心

磁盤空間 創建未來之窗 查看磁盤命令 df -h 指定路徑創建環境 conda create --prefix sadtalker python3.10 指令路徑運行環境 conda activate ./sadtalker 安裝環境 pip install torch1.12.1cu113 torchvision0.13.1cu113 torchaudio0.12.1 --extra-index-url https://…

爬蟲利器SpiderTools谷歌插件教程v1.0.0!!!web端JavaScript環境檢測!!!

SpiderTools谷歌插件教程v1.0.0 一、SpiderTools簡介二、下載通道三、插件介紹四、插件使用五、工具函數使用 補環境工具推薦&#xff1a;爬蟲補環境利器webEnv 一、SpiderTools簡介 SpiderTools主要用于檢測和監控網頁的JavaScript運行環境。該插件可以幫助開發者更好地查看…

Android開發協調布局滑動懸停

Android開發協調布局滑動懸停 直接給個xml,防止下次忘了怎么寫。 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"x…

Linux學習——TCP

一.TCP編程API 1.socket函數 1.socket函數 include include int socket(int domain,int type,int protocol); 參數 domain AF_INET AF_INET6 AF_UNIX,AF_LOCAL AF_NETLINK AF_PACKET type SOCK_STREAM: 流式…

Linux驅動開發--異步通知與異步I/O

3、異步通知與異步I/O 3.1 Linux信號 阻塞與非阻塞訪問、poll()函數提供了較好的解決設備訪問的機制&#xff0c;但是如果有了異步通知&#xff0c;整套機制則更加完整了。 異步通知的意思是&#xff1a;一旦設備就緒&#xff0c;則主動通知應用程序&#xff0c;這樣應用程序…

大語言模型推理能力的強化學習現狀理解GRPO與近期推理模型研究的新見解

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【Linux系統】Linux基礎指令(詳解Linux命令行常用指令,每一個指令都有示例演示)

文章目錄 一、與文件路徑相關的指令0.補充知識&#xff1a;路徑的認識1.pwd 指令2.cd 指令&#xff08;含家目錄的介紹&#xff09; 二、創建和刪除文件的指令0.補充知識&#xff1a;普通文件和目錄文件1.touch 指令&#xff08;可以修改文件的時間戳&#xff09;2.mkdir 指令3…

LangChain 單智能體模式示例【純代碼】

# LangChain 單智能體模式示例import os from typing import Anyfrom langchain.agents import AgentType, initialize_agent, Tool from langchain_openai import ChatOpenAI from langchain.tools import BaseTool from langchain_experimental.tools.python.tool import Pyt…

解決:VSCode C++ conan 安裝第三方庫后 頭文件報錯

文章目錄 1 頭文件include路徑查找報錯參考 1 頭文件include路徑查找報錯 找到conan_toolchain.cmake中 INCLUDE_PATH list(PREPEND CMAKE_INCLUDE_PATH "/Users/hanliqiang/.conan2/p/b/fmte8c4f7a755477/p/include")生成C編譯配置 CtrlShiftP 中選擇C Edit Confi…

松靈Cobot Magic雙臂具身遙操機器人(基于ROS的定位建圖與協同導航技術)

摘要 本文以CobotMagic可移動協作機器人為研究對象&#xff0c;從硬件架構設計、軟件系統架構、多傳感器融合定位建圖系統、智能導航系統協同機制四個維度&#xff0c;深入解析機器人系統工作原理。重點研究多傳感器融合定位建圖系統實現原理&#xff0c;結合實測數據驗證系統…

回歸,git 分支開發操作命令

核心分支說明 主分支&#xff08;master/production&#xff09;存放隨時可部署到生產環境的穩定代碼&#xff0c;僅接受通過測試的合并請求。 開發分支&#xff08;develop&#xff09;集成所有功能開發的穩定版本&#xff0c;日常開發的基礎分支&#xff0c;從該分支創建特性…

ASP.NET Core 最小 API:極簡開發,高效構建(下)

在上篇文章 ASP.NET Core 最小 API&#xff1a;極簡開發&#xff0c;高效構建&#xff08;上&#xff09; 中我們添加了 API 代碼并且測試&#xff0c;本篇繼續補充相關內容。 一、使用 MapGroup API 示例應用代碼每次設置終結點時都會重復 todoitems URL 前綴。 API 通常具有…

Spring之我見 - Spring Boot Starter 自動裝配原理

歡迎光臨小站&#xff1a;致橡樹 Spring Boot Starter 的核心設計理念是 約定優于配置&#xff0c;其核心實現基于 自動配置&#xff08;Auto-Configuration&#xff09; 和 條件化注冊&#xff08;Conditional Registration&#xff09;。以下是其生效原理&#xff1a; 約定…

精益數據分析(7/126):打破創業幻想,擁抱數據驅動

精益數據分析&#xff08;7/126&#xff09;&#xff1a;打破創業幻想&#xff0c;擁抱數據驅動 在創業的道路上&#xff0c;我們都懷揣著夢想&#xff0c;但往往容易陷入自我編織的幻想中。我希望通過和大家一起學習《精益數據分析》&#xff0c;能幫助我們更清醒地認識創業過…