MySQL B+ 樹索引詳解:從原理到實戰優化

引言

在現代數據庫應用中,查詢效率是影響系統性能的關鍵因素之一。而索引,尤其是 B+ 樹索引,是 MySQL 中最常用、最重要的性能優化手段。正確使用索引可以將查詢時間從毫秒級降低到微秒級,極大地提升應用響應速度。

1. B+ 樹索引的重要性

可以將 B+ 樹索引類比為一本書的目錄或圖書館的索書號系統:

  • 目錄類比:如果我們需要找到某個章節的內容,而沒有目錄,我們必須一頁頁翻書才能找到目標;有了目錄,我們只需查目錄頁,就能直接定位到目標頁碼。

  • 索書號類比:在圖書館,如果書籍沒有編號,需要逐本翻找;有了編號系統,可以快速定位書籍所在位置。

同理,在數據庫中,如果沒有索引:

  • 查詢條件的字段沒有索引,數據庫只能 全表掃描

  • 全表掃描在大表(如百萬級或千萬級數據)中,性能開銷巨大。

2. MySQL 中索引的作用

索引的核心作用是 提高查詢效率,具體表現在:

  1. 快速定位數據:利用索引可以減少磁盤 I/O 次數,從而提高查詢速度。

  2. 支持排序和分組:某些情況下,索引可以直接提供有序數據,避免額外排序操作。

  3. 輔助約束實現:如 唯一約束主鍵約束,本質上依賴索引實現。

示例說明

假設有一張用戶表 users

CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100),age INT
);

如果我們查詢:

SELECT * FROM users WHERE id = 12345;
  • 有索引PRIMARY KEY):數據庫通過聚簇索引直接定位到對應數據頁,速度極快。

  • 無索引:數據庫必須掃描整張表,逐行比較 id,查詢時間隨數據量線性增長。

提示:在大數據量表中,索引的存在幾乎是查詢性能優化的第一步。


這一章節的重點是讓讀者理解:

  • B+ 樹索引為什么重要;

  • 沒有索引時的查詢成本;

  • 索引對數據庫性能的直接影響。

沒有索引時的查找

當表中沒有任何索引時,MySQL 查詢會退化為 全表掃描(Full Table Scan)。這意味著數據庫必須逐行讀取數據,直到找到符合條件的記錄。

1. 單頁查找 vs 多頁查找

MySQL 的存儲引擎(尤其是 InnoDB)將表數據按 頁(Page) 管理,默認每頁大小為 16KB。數據頁是數據庫存儲和 I/O 的基本單位。

單頁查找

如果查詢的數據正好在一個數據頁中:

  • 數據庫只需讀取該頁即可完成查詢;

  • I/O 成本較低,查詢速度快。

類比:一本書,目標內容在當前閱讀頁,只需翻一次即可找到。

多頁查找

如果查詢的數據分布在多頁中:

  • 數據庫必須讀取多個頁,進行多次磁盤 I/O;

  • 數據量大時,查詢成本顯著增加。

類比:目標內容分散在書的多個章節,每次翻頁都需要查找頁碼,耗時更久。

SQL 示例

假設有一張大表 orders,存儲千萬級訂單數據:

CREATE TABLE orders (order_id BIGINT,user_id BIGINT,amount DECIMAL(10,2),order_date DATE
) ENGINE=InnoDB;

查詢示例

SELECT * FROM orders WHERE user_id = 987654321;
  • 沒有索引:MySQL 必須掃描整個表,每行檢查 user_id,I/O 成本與表大小線性增長。

  • 結果:當數據量達到千萬級別時,查詢可能需要幾秒甚至幾十秒。

2. 全表掃描的性能瓶頸

全表掃描的主要瓶頸體現在 磁盤 I/OCPU 掃描成本

  1. 磁盤 I/O:磁盤讀取是最慢的操作,尤其是機械硬盤(HDD);即使是 SSD,讀取大量數據也會消耗時間。

  2. CPU 掃描:每行數據都需要逐個比較查詢條件,即使每次比較耗時微秒級,總體也會顯著增加。

  3. 緩存失效:大表無法完全放入緩存(Buffer Pool),頻繁讀取磁盤頁,加重 I/O 壓力。

真實場景類比
  • 電商場景:假設想查詢某個用戶的歷史訂單,沒有索引意味著系統必須遍歷所有訂單記錄,每新增一百萬條訂單,查詢時間都會增長。

  • 社交場景:查詢某個用戶的好友關系時,如果沒有索引,需要掃描整張好友表,耗時巨大。

3. 小結

沒有索引時,數據庫查詢效率低,尤其是大表:

  • 單頁查找仍可快速返回,但多頁查找耗時明顯增加;

  • 全表掃描是大數據量表查詢的性能瓶頸。

引導思考:這正是 B+ 樹索引發揮價值的地方,它可以通過多層樹結構快速定位目標頁,避免全表掃描,提高查詢效率。

B+ 樹索引原理

B+ 樹是數據庫索引設計中最常用的數據結構,尤其適合磁盤存儲的大規模數據表。MySQL 的 InnoDB 和 MyISAM 默認都采用 B+ 樹索引來加速查詢。

1. B+ 樹的定義

B+ 樹是一種多路平衡搜索樹,具有以下特點:

  1. 所有葉子節點形成有序鏈表

    • 葉子節點存儲實際數據(或數據指針);

    • 葉子節點通過指針串成有序鏈表,方便范圍查詢。

  2. 非葉子節點只存儲索引信息

    • 非葉子節點只保存關鍵字和子節點指針,不存儲完整數據;

    • 可以大幅提高單個節點能容納的關鍵字數量,降低樹的高度。

  3. 自平衡

    • 插入或刪除操作會觸發節點分裂或合并,保證樹的高度平衡;

    • 平衡樹意味著查找任意數據所需路徑長度接近,查詢性能穩定。

  4. 多路搜索

    • 每個節點可以有 m 個子節點(m 稱為階),相比二叉樹(最多 2 個子節點),大幅減少樹高度;

    • 樹高度降低意味著磁盤 I/O 次數減少,從而提高查詢效率。

圖示類比
  • 書籍目錄類比

    • 根節點相當于書的總目錄;

    • 中間節點是章節目錄;

    • 葉子節點是具體頁碼。

  • 查找目標頁時,只需從總目錄到章節,再到頁碼,不用逐頁翻書。


2. B+ 樹的特性

特性描述數據庫場景意義
平衡性樹的所有葉子節點在同一層查詢任意數據路徑長度相同,性能穩定
順序性葉子節點通過指針串成鏈表支持范圍查詢、排序查詢
多路性每個節點存儲多個關鍵字和指針樹高低,減少磁盤 I/O
非葉子節點只存儲索引節省空間,增加扇出節點能存更多索引,減少樹層數

提示:B+ 樹高度通常很低,即使表中有億級數據,樹高可能僅 3~4 層。


3. B+ 樹與 B 樹、二叉樹的區別

特性二叉樹B 樹B+ 樹
每個節點最多子節點數2mm
數據存儲位置節點節點葉子節點
順序訪問復雜可通過中序遍歷葉子節點鏈表支持高效順序訪問
高度高(隨數據量增加)更低,查詢路徑更短
范圍查詢效率低可行高效(葉子節點鏈表)
核心區別總結
  1. 二叉樹:結構簡單,單層存儲一個關鍵字;大數據量下高度高,磁盤 I/O 多。

  2. B 樹:多路平衡樹,數據分布在所有節點;順序訪問需中序遍歷。

  3. B+ 樹:數據只在葉子節點,葉子鏈表支持順序訪問;磁盤 I/O 最小,查詢效率最高。

MySQL 選擇 B+ 樹而非 B 樹或二叉樹,正是為了 降低磁盤 I/O,提高范圍查詢效率


4. B+ 樹在磁盤 I/O 上的優化

數據庫中的大數據通常存儲在磁盤上,而磁盤 I/O 是最慢的操作。B+ 樹通過以下方式優化磁盤訪問:

  1. 節點盡量大

    • 一個節點可以存儲多個關鍵字(如 100~200 個),減少訪問次數。

    • 單次讀取可獲取更多索引信息,降低磁盤讀次數。

  2. 葉子節點鏈表

    • 范圍查詢只需順序訪問葉子節點鏈表,避免多次回溯根節點。

  3. 扇出大,樹高低

    • 樹高低意味著查找任意數據只需少量磁盤頁訪問,性能穩定。

示例類比

假設每頁能存儲 100 個關鍵字,數據庫有 1000 萬條記錄:

  • 二叉樹:可能需要約 24 層(2^24 > 1000萬),每次查找要 24 次磁盤訪問。

  • B+ 樹:扇出 100,每層能存 100 個關鍵字,樹高僅 34 層,查找只需 34 次磁盤訪問,大幅減少 I/O 成本。


5. B+ 樹查找過程示例

假設我們有一個 B+ 樹索引,存儲 user_id 字段:

SELECT * FROM users WHERE user_id = 12345;

查找步驟

  1. 從根節點開始,根據關鍵字判斷到哪一個子節點;

  2. 進入子節點,再判斷到哪一個子節點;

  3. 到達葉子節點,找到匹配 user_id 的數據;

  4. 如果是范圍查詢,順序訪問葉子節點鏈表即可。

通過多路樹和葉子鏈表,B+ 樹能夠在 O(log n) 的復雜度下完成查找,并支持高效范圍查詢。


6. 小結

B+ 樹索引的核心優勢:

  • 低樹高:減少磁盤 I/O,查詢效率高。

  • 有序葉子節點鏈表:支持范圍查詢和排序。

  • 非葉子節點只存索引:節省存儲空間,提高節點扇出。

  • 平衡性:保證任意查詢路徑長度相同,性能穩定。

引導思考:理解了 B+ 樹原理后,我們才能深入解析 MySQL 的 InnoDB 聚簇索引與二級索引實現,以及 B+ 樹如何在實際業務中發揮性能優勢。

MySQL 中的 B+ 樹索引實現

在 MySQL 中,不同存儲引擎對 B+ 樹索引的實現有所差異,理解這些差異對于索引優化至關重要。


1. InnoDB 存儲引擎的 B+ 樹索引

InnoDB 是 MySQL 的默認存儲引擎,支持事務、行級鎖和外鍵約束。它的索引主要分為 聚簇索引(Clustered Index)二級索引(Secondary Index)

1.1 聚簇索引(Clustered Index)

特點

  1. 表數據和索引存儲在同一 B+ 樹葉子節點

    • 每個葉子節點存儲完整行數據(整行記錄);

    • 葉子節點順序與主鍵順序相同。

  2. 主鍵默認聚簇

    • 每張 InnoDB 表必須有主鍵;

    • 如果沒有顯式主鍵,InnoDB 會選擇一個唯一非空索引作為聚簇索引;

    • 若都沒有,會內部生成隱藏主鍵。

  3. 查詢效率高

    • 根據主鍵查找記錄,直接定位葉子節點,無需額外訪問數據頁。

示例

創建一張用戶表:

CREATE TABLE users (id BIGINT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100),age INT
) ENGINE=InnoDB;
  • id 為主鍵,InnoDB 會構建聚簇索引。

  • 查詢:

    SELECT * FROM users WHERE id = 1001;
    
  • 直接通過聚簇索引定位葉子節點,返回整行數據。

類比:聚簇索引就像圖書館按索書號排序的書架,書架順序與索書號完全一致,找到書籍無需額外翻找。


1.2 二級索引(Secondary Index)

特點

  1. 葉子節點存儲索引列 + 主鍵

    • 二級索引不存儲整行數據,葉子節點存儲索引字段和對應的主鍵;

    • 查詢時先通過二級索引找到主鍵,再回聚簇索引取數據(稱為 回表)。

  2. 支持非主鍵列查詢

    • 用于加速 WHERE 條件或 JOIN 的非主鍵字段查詢。

示例

email 字段建立索引:

CREATE INDEX idx_email ON users(email);

查詢:

SELECT * FROM users WHERE email = 'test@example.com';
  • InnoDB 先通過二級索引 idx_email 找到主鍵 id

  • 再通過聚簇索引回表獲取整行數據。

提示:二級索引查詢可能比主鍵查詢稍慢,因為涉及一次回表操作。


2. MyISAM 存儲引擎的 B+ 樹索引

MyISAM 是 MySQL 的早期默認引擎,非事務型,索引實現方式有所不同。

2.1 特點
  1. 葉子節點只存儲指針

    • 數據文件和索引文件分開存儲;

    • 葉子節點存儲數據在數據文件中的地址(偏移量),不是整行數據。

  2. 索引訪問需要額外 I/O

    • 查詢時先通過 B+ 樹找到數據地址,再讀取數據文件。

示例
CREATE TABLE myisam_users (id BIGINT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100)
) ENGINE=MyISAM;CREATE INDEX idx_email ON myisam_users(email);
  • 查詢 email 時,索引只提供數據地址,數據庫需要額外讀取數據頁獲取整行信息。

類比:像查閱圖書館目錄,目錄給出書架編號,需要再去書架拿書,比 InnoDB 聚簇索引多了一步。


3. 聚簇索引 vs 二級索引對比

特性聚簇索引(InnoDB)二級索引(InnoDB / MyISAM)
數據存儲位置葉子節點存儲整行數據葉子節點存儲索引列 + 主鍵(InnoDB)或數據地址(MyISAM)
查詢效率略低,需要回表
適用場景主鍵查詢、范圍查詢非主鍵字段查詢、JOIN
物理順序與主鍵順序一致不保證與數據順序一致

優化提示:對經常查詢的非主鍵列建立二級索引,可以顯著提升查詢性能,但要考慮回表成本。


4. B+ 樹索引在查詢中的實際應用

4.1 精確查詢
SELECT * FROM users WHERE id = 12345;  -- 使用聚簇索引
SELECT * FROM users WHERE email = 'abc@test.com';  -- 使用二級索引
  • 聚簇索引查詢直接定位數據;

  • 二級索引查詢需要一次回表。

4.2 范圍查詢
SELECT * FROM users WHERE id BETWEEN 1000 AND 2000;  -- 聚簇索引
SELECT * FROM users WHERE age BETWEEN 20 AND 30;    -- 二級索引
  • 范圍查詢通過葉子節點鏈表順序遍歷葉子節點,高效獲取連續數據。

4.3 排序查詢
SELECT * FROM users ORDER BY id ASC;  -- 聚簇索引天然有序
  • 聚簇索引順序存儲,可直接使用索引避免額外排序操作。


5. 小結

  • InnoDB:聚簇索引存儲整行數據,二級索引存儲索引列 + 主鍵;支持高效查找、范圍查詢和排序。

  • MyISAM:索引與數據分離,葉子節點存數據地址;查詢時需要額外 I/O。

  • B+ 樹優勢:無論哪種存儲引擎,都能保證低樹高、順序訪問、快速定位目標數據。

引導思考:理解索引在不同存儲引擎中的實現,有助于在下一章設計高效的索引策略,實現實際查詢優化。

B+ 樹索引的優化策略

良好的索引設計不僅能提升查詢性能,還能降低數據庫 I/O 壓力。下面我們詳細講解常用優化策略。


1. 索引設計原則

1.1 最左前綴原則

定義:在 聯合索引(Composite Index)中,索引的有效性遵循最左前綴原則,即查詢條件必須從索引最左邊的列開始使用。

示例

創建聯合索引:

CREATE INDEX idx_user_age ON users(username, age);
  • 查詢有效索引:

    SELECT * FROM users WHERE username = 'alice';       -- 使用索引
    SELECT * FROM users WHERE username = 'alice' AND age = 25;  -- 使用索引
    
  • 查詢無效索引:

    SELECT * FROM users WHERE age = 25;  -- 無法使用 idx_user_age
    

提示:聯合索引中,最左列應選擇選擇性高、查詢頻繁的字段。


1.2 覆蓋索引(Covering Index)

定義:查詢中使用的字段全部包含在索引中,無需回表即可返回結果。

示例
CREATE INDEX idx_email_age ON users(email, age);SELECT email, age FROM users WHERE email = 'test@example.com';
  • 索引包含查詢字段,無需訪問聚簇索引葉子節點;

  • 查詢速度更快,尤其在大表上效果顯著。

類比:像查圖書館目錄時,目錄本身就包含所有信息,無需去書架取書。


1.3 聯合索引設計策略
  • 選擇性優先:索引最左列應選擇 選擇性最高(不同值多)的字段。

  • 避免重復冗余:不要重復創建已包含的列組合索引。

  • 考慮查詢頻率:根據常用查詢條件建立聯合索引。


2. 避免索引失效的常見問題

2.1 數據類型隱式轉換
SELECT * FROM users WHERE id = '123';  -- id 為 INT,查詢傳入字符串
  • 會觸發類型轉換,導致索引失效。

  • 解決方案:保持數據類型一致。

2.2 函數或表達式操作
SELECT * FROM users WHERE DATE(order_date) = '2025-08-01';
  • 對索引列使用函數,MySQL 無法利用索引;

  • 優化方式:

    SELECT * FROM users WHERE order_date BETWEEN '2025-08-01 00:00:00' AND '2025-08-01 23:59:59';
    

2.3 前綴模糊匹配
SELECT * FROM users WHERE username LIKE '%abc';  -- 索引失效
SELECT * FROM users WHERE username LIKE 'abc%';  -- 索引有效
  • 索引只對前綴匹配有效,避免使用前置通配符。

2.4 OR 條件查詢
SELECT * FROM users WHERE username = 'alice' OR email = 'test@example.com';
  • MySQL 可能無法同時使用索引,可考慮使用 UNION 優化:

SELECT * FROM users WHERE username = 'alice'
UNION
SELECT * FROM users WHERE email = 'test@example.com';

3. 索引優化實踐案例

3.1 精確匹配優化
-- 原查詢(無索引)
SELECT * FROM orders WHERE user_id = 987654321;-- 優化后
CREATE INDEX idx_user_id ON orders(user_id);
SELECT * FROM orders WHERE user_id = 987654321;
  • 效果:查詢從全表掃描數秒降至毫秒級。

3.2 范圍查詢優化
-- 原查詢
SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';-- 優化后
CREATE INDEX idx_order_date ON orders(order_date);
SELECT * FROM orders WHERE order_date BETWEEN '2025-01-01' AND '2025-01-31';
  • 利用 B+ 樹葉子節點鏈表,順序遍歷葉子節點,范圍查詢高效。

3.3 覆蓋索引示例
-- 查詢 email 和 age
CREATE INDEX idx_email_age ON users(email, age);SELECT email, age FROM users WHERE email = 'abc@test.com';
  • 查詢只訪問索引,不回表,顯著減少 I/O。


4. 使用 EXPLAIN 分析索引

通過 EXPLAIN 查看查詢計劃,判斷索引是否被使用。

EXPLAIN SELECT * FROM users WHERE email = 'abc@test.com';
  • key 列顯示使用的索引;

  • rows 列顯示掃描行數;

  • 優化目標:rows 盡量小,索引使用合理。


5. 小結

  • 索引設計原則:最左前綴、覆蓋索引、聯合索引選擇性優先。

  • 避免索引失效:注意數據類型、函數操作、前綴匹配及 OR 條件。

  • 實戰技巧:結合 EXPLAIN 分析,觀察查詢是否真正命中索引。

  • 優化效果:合理索引可將大表查詢性能提升數十倍甚至上百倍。

引導思考:理解索引優化策略后,下一步就是索引的創建、管理和維護,這直接關系到實際應用的穩定性和性能。

索引的創建與管理

在 MySQL 中,索引不僅需要設計合理,還需要正確創建、維護和管理,以確保查詢性能穩定。


1. 創建索引的 SQL 語句

MySQL 支持多種索引類型:

  • 主鍵索引(PRIMARY KEY):唯一且不允許 NULL。

  • 唯一索引(UNIQUE):保證索引列唯一。

  • 普通索引(INDEX / KEY):無唯一性約束。

  • 全文索引(FULLTEXT):用于文本搜索(MyISAM 和 InnoDB 支持不同)。

1.1 創建普通索引
CREATE INDEX idx_username ON users(username);
  • 查詢示例:

SELECT * FROM users WHERE username = 'alice';
1.2 創建聯合索引
CREATE INDEX idx_user_email ON users(username, email);
  • 查詢示例:

SELECT * FROM users WHERE username = 'alice' AND email = 'abc@test.com';
  • 注意:遵循 最左前綴原則

1.3 創建唯一索引
CREATE UNIQUE INDEX idx_email_unique ON users(email);
  • 確保 email 列的唯一性,適合用戶注冊或賬號字段。

1.4 創建主鍵索引
ALTER TABLE users ADD PRIMARY KEY(id);
  • InnoDB 默認使用主鍵構建聚簇索引。


2. 刪除索引的 SQL 語句

  • 刪除普通索引:

DROP INDEX idx_username ON users;
  • 刪除唯一索引同理。

  • 刪除主鍵索引:

ALTER TABLE users DROP PRIMARY KEY;

注意:刪除索引會影響查詢性能,操作前需評估影響范圍。


3. 索引的維護與重建

索引在長期使用中可能需要維護,常見操作包括重建和優化:

3.1 重建索引
  • 重建索引可清理碎片,提高查詢性能。

  • 對 MyISAM 表:

OPTIMIZE TABLE users;
  • 對 InnoDB 表:

ALTER TABLE users ENGINE=InnoDB;

以上操作會重建表和索引,適合大表碎片整理或索引結構優化。

3.2 刪除低效索引
  • 使用 EXPLAIN 分析查詢計劃,找出未使用或低效索引;

  • 刪除或合并索引,避免重復占用空間。

3.3 定期檢查索引
  • 查詢 information_schema.STATISTICS 表,了解索引信息:

SELECT INDEX_NAME, COLUMN_NAME, NON_UNIQUE FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'users';
  • 根據業務查詢特點,調整索引結構。


4. 實戰案例

4.1 優化查詢
-- 原查詢無索引 SELECT * FROM orders WHERE user_id = 987654321; 
-- 創建索引 CREATE INDEX idx_user_id ON orders(user_id); 
-- 查詢性能顯著提升 EXPLAIN SELECT * FROM orders WHERE user_id = 987654321;
4.2 重建索引清理碎片
-- 長期運行表,索引碎片多
OPTIMIZE TABLE orders;-- 再次執行查詢,I/O 更少,性能穩定
SELECT * FROM orders WHERE user_id = 987654321;

5. 小結

  • 創建索引:根據查詢場景選擇主鍵、唯一索引、普通索引或聯合索引。

  • 刪除索引:慎重操作,避免影響查詢性能。

  • 索引維護:重建、優化和定期檢查索引,可保證長期性能穩定。

  • 實踐技巧:結合 EXPLAIN 分析索引使用情況,持續優化。

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

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

相關文章

計算機內存中的整型存儲奧秘、大小端字節序及其判斷方法

目錄 一、回顧與引入:整數在內存中的存儲方式 為什么要采用補碼存儲? 二、大小端字節序及其判斷方法 1、什么是大小端? 2、為什么存在大小端? 3、練習 練習1:簡述大小端概念并設計判斷程序(百度面試…

Redis 最常用的 5 種數據類型

Redis 支持多種靈活的數據類型,每種類型針對特定場景優化。以下是 **Redis 最常用的 5 種數據類型**及其核心特點和應用場景:1. 字符串(String)描述:最基本的數據類型,可存儲文本、數字(整數/浮…

【嵌入式】RK3588 對比 NVIDIA Jetson,Radxa Rock 5B vs Orange Pi 5 Max

RK3588這個芯片,適合AI應用么,為什么這么貴呢 AI 邊緣盒子里的旗艦芯 深度分析一下 RK3588(瑞芯微 Rockchip RK3588) 為什么被很多人關注在 AI 應用,以及它價格偏高的原因。 ?? 1. RK3588 的基本情況 制程:8nm(Samsung 8nm LP) CPU:8 核 big.LITTLE 架構(4 Cortex-…

暴雨讓高性能計算更“冷靜”

當AI大模型的參數突破萬億,當深地探測的精度邁向微米,當數字經濟的脈搏與千行百業深度共振,算力已成為驅動時代向前的核心引擎。然而,傳統風冷技術在高密度算力需求面前漸顯乏力——機柜內的熱浪如同無形的枷鎖,既制約…

SpringAI集成MCP

文章目錄1_調用公用MCP2_Stdio方式3_Stdio實現原理4_SSE方式5_自定義MCP客戶端6_MCP Server權限控制SpringAI 通過 SpringBoot 集成擴展了 MCP Java SDK ,提供了客戶端和服務端 starter,讓 AI 應用程序快速支持 MCP。接下來直接演示。 1_調用公用MCP 在…

Spring Start Here 讀書筆記:第10章 Implementing REST services

REST 服務可用于實現兩個應用之間的通訊,包括 Web 應用中的客戶端和服務器之間,移動應用與后端服務之間,或兩個后端服務之間。 10.1 使用 REST 服務在應用之間交換數據 REST端點是應用程序通過 Web 協議公開服務的方式,因此也稱…

SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告

以下是對SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在郵件/短信發送功能上的全面橫向對比報告(截至2025年8月最新版本),涵蓋技術實現、配置復雜度、適用場景及權威評測:??一、郵件發送能力對比????1. Orac…

服務器與客戶端

目錄 一、服務器(Server) 核心特點 常見類型 二、客戶端(Client) 核心特點 常見類型 客戶端與服務器的交互流程 補充:與 “對等網絡(P2P)” 的區別 C/S模式 一、C/S 模式的核心原理 …

GaussDB 并發自治事務數達到最大值處理案例

1 業務背景自治事務(Autonomous Transactions)是一種高級特性,允許你在一個事務中執行另一個獨立的事務。這種機制特別有用,尤其是在需要在一個事務中執行多個操作但又不想因為其中一個操作失敗而影響整個事務的場景。2 業務影響在…

【傳奇開心果系列】Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板

Flet分頁自定義組件CustomPaginationComponent封裝版自定義模板一、效果展示GIF動圖二、應用場景三、特色說明四、源碼下載地址一、效果展示GIF動圖 二、應用場景 圖片瀏覽應用: 用戶可以通過分頁組件瀏覽多張圖片,每點擊一次“上一頁”或“下一頁”按鈕…

數據安全——39頁解讀數字化轉型大數據安全基礎培訓方案【附全文閱讀】

適應人群為企業數據安全管理人員、IT 運維人員、數字化轉型決策者、網絡安全工程師及關注大數據安全的從業人員。主要內容圍繞數字化轉型中大數據安全展開,核心包括基礎概念(信息、數據與大數據的定義及區別,大數據 4V 特點與來源);安全風險(企業面臨的數據資產管理缺失、…

week3-[二維數組]小方塊

week3-[二維數組]小方塊 題目描述 如果四個數 a,b,c,da,b,c,da,b,c,d 可以分成兩組,每組兩個數,滿足每組里面的兩個數一樣,那么稱這四個數是好的。 比如,2,5,2,52,5,2,52,5,2,5 是好的,因它滿足兩組:222 與…

Swift 項目結構詳解:構建可維護的大型應用

Swift 項目結構詳解:構建可維護的大型應用一、基礎結構(推薦新手使用)二、組件化結構(企業級應用推薦)層級架構:MVVM Coordinator路由實現(Coordinator模式)三、通用組件實現DI&…

【實時Linux實戰系列】基于實時Linux的數字轉換器設計

在現代電子系統中,數字轉換器(如模數轉換器ADC和數模轉換器DAC)扮演著至關重要的角色。它們負責將模擬信號轉換為數字信號,或將數字信號轉換為模擬信號,從而實現信號的數字化處理和傳輸。在實時系統中,如工…

FastTracker:實時準確的視覺跟蹤

摘要 https://arxiv.org/pdf/2508.14370 傳統的多目標跟蹤(MOT)系統主要設計用于行人跟蹤,通常對其他物體類別的泛化能力有限。本文提出了一種能夠處理多種物體類型的通用跟蹤框架,特別強調在復雜交通場景中的車輛跟蹤。所提出的1方法包含兩個關鍵組件&a…

國產輕量級桌面GIS軟件Snaplayers從入門到精通(20)

國產輕量級桌面GIS軟件Snaplayers實操:打開圖層并顯示屬性信息1、根據數據格式選擇圖層文件2、加載圖層到地圖中,并在左側顯示圖層的屬性表格3、屬性表格分頁顯示Snaplayers研發團隊承諾:國產輕量級桌面GIS軟件Snaplayers永久免費并持續更新

快速入門flask應用(從入門到實戰)

目錄 前言: 了解一些網絡通信的概念 什么是網絡通信: 當我們訪問一個網址的時候發生了什么: 1. 解析 URL:明確訪問目標 2. DNS 域名解析:將 “名字” 轉為 “地址” 3. 建立連接:TCP 三次握手&#x…

C++/QT 開發技能樹詳解

一、 編程語言 (C)1. C基礎語法(數據類型、模板、命名空間)是什么: 這是構建C程序的基石。數據類型定義了變量存儲的數據種類和大小;模板允許編寫與數據類型無關的通用代碼;命名空間用于避免大型項目中的名稱沖突。如何…

Java多線程進階-死鎖與面試題解析

文章目錄Java多線程進階:死鎖與面試題解析一、并發編程的噩夢——死鎖1. 什么是死鎖?四個缺一不可的條件2. 如何避免死鎖?從破壞循環等待開始二、并發編程面試題全景解析1. 鎖與同步機制2. CAS 與原子操作3. JUC 工具與線程池4. 線程安全集合…

ZYNQ啟動流程——ZYNQ學習筆記11

ZYNQ SoC 的啟動由片上的 BootROM 開始。片上 BootROM 是 ZYNQ 芯片上的一塊非易失性存儲器,它包含了 ZYNQ 所支持的配置器件的驅動, 而且里面的代碼是不可修改的。 BootROM 中的代碼首先會在片外的非易失性存儲器中尋找一個頭文件, 頭文件里…