窗口函數替代子查詢的復雜查詢簡化技巧

窗口函數通過單次掃描完成分析計算,能大幅簡化子查詢結構并提升性能,尤其在排名、累計計算等場景?15。以下是核心優化技巧:

一、排名場景替代方案

  1. ?部門工資排名?
    傳統子查詢需自連接和聚合計數:

    sql

    SELECT e1.name, e1.salary, (SELECT COUNT(*)+1 FROM employees e2 WHERE e2.dept=e1.dept AND e2.salary>e1.salary) AS rank FROM employees e1;

    窗口函數單次掃描完成:

    sql

    SELECT name, salary, RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS rank FROM employees;

  2. ?分組TOP N查詢?
    使用ROW_NUMBER()直接過濾組內前N條:

    sql

    WITH ranked AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY sales DESC) AS rn FROM sales ) SELECT * FROM ranked WHERE rn <= 3;

    避免關聯子查詢的多次索引掃描?。

二、累計計算優化

  • 子查詢瓶頸?:逐行執行導致O(n2)復雜度
    sql

    SELECT t1.date, (SELECT SUM(t2.amount) FROM sales t2 WHERE t2.date<=t1.date) AS cumulative FROM sales t1;

  • 窗口方案?:線性時間復雜度
    sql

    SELECT date, SUM(amount) OVER (ORDER BY date) AS cumulative FROM sales;

    百萬級數據性能提升顯著?。

三、跨行引用優化

使用LAG()避免自連接,例如環比增長率計算:

sql

SELECT month, revenue, (revenue - LAG(revenue,1) OVER (ORDER BY month)) / LAG(revenue,1) OVER (ORDER BY month) AS growth FROM financials;

比關聯子查詢減少50%以上I/O消耗?。

四、關鍵優化原則

  1. ?索引匹配?
    PARTITION BYORDER BY字段需建復合索引,否則全表掃描?.
  2. ?框架選擇?
    大分區數據用RANGE替代ROWS防內存溢出:
    sql

    SUM(amount) OVER (ORDER BY date RANGE UNBOUNDED PRECEDING)

  3. ?避免反模式?
    窗口函數中嵌套子查詢會抵消性能優勢.

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

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

相關文章

深度學習:預訓練和warm up的區別

“預訓練&#xff08;Pre-training&#xff09;”和“Warm-up&#xff08;預熱&#xff09;”是深度學習中常見的兩個訓練策略&#xff0c;它們雖然都在訓練初期起作用&#xff0c;但本質和目的完全不同。一、預訓練&#xff08;Pre-training&#xff09;1. 定義預訓練是指&…

Apache Ignite中分布式信號量(Distributed Semaphore)的說明和使用示例

這段內容是關于 Apache Ignite 中 分布式信號量&#xff08;Distributed Semaphore&#xff09; 的說明和使用示例。我們來一步步解析&#xff0c;幫助你深入理解它的含義和用途。&#x1f539; 一、什么是 Semaphore&#xff08;信號量&#xff09;&#xff1f; 在并發編程中&…

怎么提升服務器的防攻擊能力!

提升服務器的防攻擊能力需要從??架構設計、技術防護、運維管理??等多維度入手&#xff0c;覆蓋網絡層、系統層、應用層及數據層的安全防護。以下是具體的策略和實踐方法&#xff1a;??一、基礎安全加固&#xff1a;消除自身漏洞??服務器自身的脆弱性是最常見的攻擊入口…

vscode配置rust環境

1.官網下載vscode&#xff0c;安裝 2.vscode命令行運行&#xff1a; Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe然后&#xff1a; .\rustup-init.exe3.驗證 先配置path&#xff1a; $env:Path ";$env:USERPROFILE\.cargo\bin"查看是…

最新版 HarmonyOS NEXT 開發工具安裝教程:如何在 macOS 系統安裝 DevEco Studio 5.0.3 編輯器?

最新版 HarmonyOS NEXT 開發工具安裝教程&#xff1a;如何在 macOS 系統安裝 DevEco Studio 5.0.3 編輯器&#xff1f; 什么是 DevEco Studio&#xff1f; DevEco Studio 是華為為 HarmonyOS 開發的強大集成開發環境&#xff08;IDE&#xff09;&#xff0c;專為開發 Harmony…

電商項目統一認證方案設計與實戰

1. 微服務網關整合 OAuth2.0 設計思路分析 網關整合 OAuth2.0 有兩種思路&#xff0c;一種是授權服務器生成令牌, 所有請求統一 在網關層驗證&#xff0c;判斷權限等操作&#xff1b;另一種是由各資源服務處理&#xff0c;網關只做請求 轉發 。 比較常用的是第一種&#xf…

學習Markdown

標題一 標題二 標題三 標題四 標題五 標題六這是一段引用文本直接編寫&#xff0c;段落換行是末尾兩個以上的空格&#xff0b;回車 或者在段落后加一個空行 粗體語法&#xff1a;使用兩個星號 ** 或兩個下劃線 __ 包圍文字&#xff1a;這是粗體文字使用星號 這是__粗體文字__使…

劇本殺系統 App 開發:科技賦能,重塑劇本殺游戲體驗

在科技飛速發展的當下&#xff0c;各個行業都在積極尋求與科技的融合&#xff0c;以實現創新和升級。劇本殺行業也不例外&#xff0c;劇本殺系統 App 的開發正是科技賦能的生動體現&#xff0c;它重塑了傳統的劇本殺游戲體驗&#xff0c;為玩家帶來了全新的感受。劇本殺系統 Ap…

wvp-gb28181-pro 只用jar運行

編譯前端后npm install --global yarnyarn --registryhttps://registry.npmjs.org installyarn run build&#xff0c;生成的前端文件&#xff0c;會在wvp-GB28181-pro\src\main\resources\static&#xff0c;因為是在resources中&#xff0c;打maven打包后會一起打到jar中&…

深度學習(魚書)day06--神經網絡的學習(后兩節)

深度學習&#xff08;魚書&#xff09;day06–神經網絡的學習&#xff08;后兩節&#xff09;一、梯度 像 這樣的由全部變量的偏導數匯總而成的向量稱為梯度&#xff08;gradient&#xff09;。 梯度實現的代碼&#xff1a; def numerical_gradient(f, x):h 1e-4 # 0.0001grad…

學習嵌入式的第三十四天-數據結構-(2025.7.29)數據庫

數據庫基礎概念 數據庫是用于存儲和管理海量數據的應用程序&#xff0c;提供數據增刪改查及統計功能&#xff08;如最大值、最小值、平均數等&#xff09;。通過SQL語句操作數據&#xff0c;以表格形式管理存儲。 數據庫分類 關系型數據庫 Oracle&#xff08;大型&#xff0…

STM32——HAL庫

總&#xff1a;STM32——學習總綱 一、簡介 1.1 CMIS簡介 所有廠家為了市場兼容性推出的標準 arm架構 1.2 HAL庫簡介 1.2.1 各種庫優缺點 二、 STM32 Cube固件包 ST公司為CMSIS 中間層開發的pack&#xff0c;包含HAL。 2.1 獲取方式 ST官網&#xff1a;st.com/content/st_c…

數據結構-圖的相關定義

圖-多對多Graph&#xff08;V,E&#xff09;&#xff0c;圖&#xff08;頂點Vertex&#xff0c;邊Edge&#xff09;圖可以沒有邊&#xff0c;只有一個頂點也叫圖&#xff0c;但是單獨的一條邊&#xff0c;或者一個頂點連一條邊&#xff0c;不能叫圖有向圖&#xff1a;無向圖&am…

B 站搜一搜關鍵詞優化:精準觸達用戶的流量密碼

在 B 站內容生態中&#xff0c;搜一搜功能是用戶主動獲取信息的重要渠道&#xff0c;而關鍵詞優化則是讓你的視頻在搜索結果中脫穎而出的關鍵。通過合理優化關鍵詞&#xff0c;能提升視頻曝光率&#xff0c;吸引精準流量&#xff0c;為賬號發展注入強勁動力。以下從關鍵詞挖掘、…

Python爬蟲實戰:研究purl庫相關技術

1. 引言 隨著互聯網數據量的爆炸式增長,網絡爬蟲已成為數據采集、輿情分析和學術研究的重要工具。Python 憑借其豐富的庫生態和簡潔語法,成為開發爬蟲的首選語言。本文提出的爬蟲系統結合 requests 進行 HTTP 請求、BeautifulSoup 解析 HTML,并創新性地引入 purl 庫處理復雜…

OpenCV 學習探秘之三:從圖像讀取到特征識別,再到機器學習等函數接口的全面實戰應用與解析

一、引言 1.1介紹 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個功能強大的開源計算機視覺庫&#xff0c;廣泛應用于圖像和視頻處理、目標檢測、機器學習等領域。本文將全面解析 OpenCV 中常用的函數接口&#xff0c;幫助讀者快速掌握 OpenCV 的…

Umi從零搭建Ant Design Pro項目(3)集成 openapi 插件

1. 安裝插件 pnpm add umijs/max-plugin-openapi pnpm add swagger-ui-dist如果不安裝swagger-ui-dist&#xff0c;不會影響運行。但會報錯。 2.配置文件export default defineConfig({// umi插件配置plugins: [umijs/max-plugin-openapi],// openAPI配置openAPI: {requestLibP…

Flutter開發實戰之狀態管理深入解析

第4章:狀態管理深入解析 前言 想象一下,你正在開發一個購物車應用。用戶在商品頁面添加商品,然后去購物車頁面查看,最后到結算頁面付款。在這個過程中,購物車的數據需要在多個頁面之間保持同步和一致。這就是狀態管理要解決的核心問題。 狀態管理是Flutter開發中最重要…

組件化(一):重新思考“組件”:狀態、視圖和邏輯的“最佳”分離實踐

組件化(一)&#xff1a;重新思考“組件”&#xff1a;狀態、視圖和邏輯的“最佳”分離實踐 引子&#xff1a;組件的“內憂”與“外患” 至此&#xff0c;我們的前端內功修煉之旅已經碩果累累。我們掌握了組件化的架構思想&#xff0c;擁有了高效的渲染引擎&#xff0c;還探索…

【Redis】Redis 協議與連接

一、Redis 協議 1.1 RESP RESP 是 Redis 客戶端與服務器之間的通信協議&#xff0c;采用文本格式&#xff08;基于 ASCII 字符&#xff09;&#xff0c;支持多種數據類型的序列化和反序列化 RESP 通過首字符區分數據類型&#xff0c;主要支持 5 種類型&#xff1a; 類型首字…