最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL壓縮表創(chuàng)建方法示例詳解

 更新時間:2025年09月28日 09:32:47   作者:lang20150928  
本文給大家介紹MySQL壓縮表創(chuàng)建方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

這段內(nèi)容是 MySQL 官方文檔 17.9.1.2 節(jié):創(chuàng)建壓縮表(Creating Compressed Tables),它詳細(xì)說明了如何在兩種不同類型的表空間中創(chuàng)建 InnoDB 壓縮表,并解釋了相關(guān)的語法、限制和注意事項。

我們來一步步拆解、翻譯并通俗化講解,讓你徹底理解:

? 如何正確創(chuàng)建一個壓縮表
?? 需要注意哪些坑
?? 各參數(shù)的含義與關(guān)系

?? 一句話總結(jié)

你可以通過 ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE獨(dú)立表空間(file-per-table)通用表空間(general tablespace) 中創(chuàng)建壓縮表,但 不能在系統(tǒng)表空間中使用壓縮。兩者配置方式略有不同,尤其是通用表空間需要預(yù)先定義 FILE_BLOCK_SIZE。

?? 一、支持壓縮的表空間類型回顧

表空間類型是否支持壓縮說明
? 文件獨(dú)立表空間(.ibd 文件)每個表一個文件,默認(rèn)開啟
? 通用表空間(General Tablespace)多個表共享一個 .ibd 文件
? 系統(tǒng)表空間(ibdata1包含系統(tǒng)數(shù)據(jù)(如 undo log),不支持壓縮

?? 所以:只要你的表不是放在 ibdata1 里,就可以壓縮。

??? 二、方法一:在“獨(dú)立表空間”中創(chuàng)建壓縮表

? 前提條件:

  • innodb_file_per_table=ON(默認(rèn)就是 ON)
SET GLOBAL innodb_file_per_table = 1; -- 可選:確保啟用(通常已默認(rèn))

? 創(chuàng)建語句:

CREATE TABLE t1 (
  c1 INT PRIMARY KEY
) 
ROW_FORMAT = COMPRESSED 
KEY_BLOCK_SIZE = 8;

?? 參數(shù)說明:

參數(shù)作用
ROW_FORMAT=COMPRESSED明確啟用壓縮
KEY_BLOCK_SIZE=8目標(biāo)壓縮頁大小為 8KB(單位是 KB)

?? 實際磁盤上的頁會被壓縮到接近這個大?。ㄈ缭?16KB → 壓縮成 ~8KB)

?? 三、方法二:在“通用表空間”中創(chuàng)建壓縮表

這是重點,比獨(dú)立表空間復(fù)雜一些。

? 步驟 1:先創(chuàng)建通用表空間,指定FILE_BLOCK_SIZE

CREATE TABLESPACE `ts2` 
ADD DATAFILE 'ts2.ibd' 
FILE_BLOCK_SIZE = 8192 
ENGINE=InnoDB;
  • FILE_BLOCK_SIZE = 8192:表示這個表空間的 物理塊大小是 8KB
  • 單位是 字節(jié)(注意!和 KEY_BLOCK_SIZE 不同)

? 步驟 2:創(chuàng)建表時,KEY_BLOCK_SIZE必須匹配

CREATE TABLE t4 (
  c1 INT PRIMARY KEY
) 
TABLESPACE ts2 
ROW_FORMAT = COMPRESSED 
KEY_BLOCK_SIZE = 8;  -- 8192 字節(jié) = 8KB

?? 關(guān)鍵規(guī)則:

KEY_BLOCK_SIZE(單位 KB)必須等于 FILE_BLOCK_SIZE / 1024

innodb_page_sizeFILE_BLOCK_SIZEKEY_BLOCK_SIZE
16384 (16KB)8192 (8KB)8
1638440964
1638420482

? 如果不匹配?→ 報錯!

?? 四、重要注意事項(Notes)

1?? MySQL 8.0 起:壓縮表空間文件更小

“The tablespace file for a compressed table is created using the physical page size…”

  • 以前:空壓縮表也占滿 16KB 一頁
  • 現(xiàn)在:直接按壓縮后的大小分配空間 → 初始 .ibd 文件更小

? 好處:節(jié)省空間,啟動更快

2??ROW_FORMAT=COMPRESSED和KEY_BLOCK_SIZE可以互相推導(dǎo)

你寫的實際效果
ROW_FORMAT=COMPRESSED(無 KEY_BLOCK_SIZE自動設(shè)為 innodb_page_size / 2 → 通常是 8KB
KEY_BLOCK_SIZE=4(無 ROW_FORMAT自動啟用壓縮

?? 所以這兩個參數(shù)寫一個就行,另一個可省略。

3?? 如何選擇最佳KEY_BLOCK_SIZE?

文檔建議:

“typically you create several copies of the same table with different values… then measure performance”

? 推薦做法:

  1. 創(chuàng)建多個副本:KEY_BLOCK_SIZE=8, 4, 2
  2. 導(dǎo)入真實數(shù)據(jù)
  3. 測量:
    • .ibd 文件大小
    • 查詢性能(TPS/QPS)
    • CPU 使用率
  4. 選擇綜合最優(yōu)值

?? 經(jīng)驗值:

  • 大多數(shù)場景用 8 就很好
  • 數(shù)據(jù)特別大或 SSD 成本敏感 → 嘗試 42

4??KEY_BLOCK_SIZE是“提示”,不是強(qiáng)制

  • InnoDB 可能根據(jù)實際情況調(diào)整
  • 如果設(shè)得太大(> innodb_page_size)→ 忽略,警告,自動改為一半
  • 如果 innodb_strict_mode=ON(默認(rèn))→ 直接報錯

5?? 大頁(32KB/64KB)不支持壓縮!

“InnoDB supports 32KB and 64KB page sizes but these do not support compression.”

  • innodb_page_size=3276865536 → 無法使用壓縮
  • 所以想用壓縮,必須保持 innodb_page_size ≤ 16KB

6?? 設(shè)置KEY_BLOCK_SIZE = 16有意義嗎?

  • 對于獨(dú)立表空間:

    • KEY_BLOCK_SIZE=16 → 通常壓縮率很低(因為原始頁就是 16KB)
    • 但對 包含大量 BLOB/TEXT 的表 仍可能有效,因為這些字段會存到“溢出頁”(off-page),壓縮后可減少溢出頁數(shù)量
  • 對于通用表空間:

    • ? 不允許 KEY_BLOCK_SIZE = innodb_page_size
    • 必須小于原始頁大小

7?? 所有索引都會被壓縮

“All indexes of a table… are compressed using the same page size”

  • 主鍵(聚簇索引)、二級索引、唯一索引 → 全部壓縮
  • 壓縮是 整表級別 的,不是按行或按索引設(shè)置
  • CREATE INDEX 時不支持指定壓縮參數(shù)(會被忽略)

?? 五、壓縮表的限制(Restrictions)

限制說明
? 不能在系統(tǒng)表空間中壓縮ibdata1 不支持
? 通用表空間內(nèi)不能混用壓縮和非壓縮表要么全壓縮,要么全不壓縮
? 不支持壓縮臨時表CREATE TEMPORARY TABLE ... COMPRESSED → 報錯或自動轉(zhuǎn)為非壓縮
? 壓縮是整表行為不能只壓縮某幾列或某幾個索引
? CREATE INDEX 不支持壓縮語法但繼承表的壓縮設(shè)置

?? 六、參數(shù)對比表(關(guān)鍵區(qū)別)

參數(shù)出現(xiàn)場景單位示例說明
innodb_page_size全局配置字節(jié)16384內(nèi)存中的原始頁大小(默認(rèn) 16KB)
KEY_BLOCK_SIZECREATE TABLEKB8目標(biāo)壓縮頁大?。↘B)
FILE_BLOCK_SIZECREATE TABLESPACE字節(jié)8192通用表空間的物理塊大小

?? 記?。?code>KEY_BLOCK_SIZE = FILE_BLOCK_SIZE / 1024

? 七、完整示例:推薦做法

場景:在通用表空間中創(chuàng)建壓縮表

-- 1. 創(chuàng)建通用表空間(8KB 物理塊)
CREATE TABLESPACE `compressed_ts` 
ADD DATAFILE 'compressed_ts.ibd' 
FILE_BLOCK_SIZE = 8192 
ENGINE=InnoDB;
-- 2. 創(chuàng)建壓縮表(KEY_BLOCK_SIZE=8)
CREATE TABLE sales_archive (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  product VARCHAR(100),
  amount DECIMAL(10,2),
  created_date DATE
) TABLESPACE compressed_ts 
  KEY_BLOCK_SIZE = 8;  -- ROW_FORMAT=COMPRESSED 自動啟用

? 總結(jié):關(guān)鍵要點

要點說明
? 支持壓縮的表空間file-per-tablegeneral tablespace
? 不支持系統(tǒng)表空間、臨時表
?? 啟用方式ROW_FORMAT=COMPRESSEDKEY_BLOCK_SIZE=N
?? KEY_BLOCK_SIZE目標(biāo)壓縮頁大?。↘B),常用 8/4/2
?? 通用表空間必須先設(shè) FILE_BLOCK_SIZE(字節(jié)),且 KEY_BLOCK_SIZE = FILE_BLOCK_SIZE/1024
?? 參數(shù)互推寫一個,另一個可自動推導(dǎo)
?? 最佳實踐測試不同 KEY_BLOCK_SIZE,選擇最優(yōu)
?? 注意大頁(32KB/64KB)不支持壓縮

?? 一句話建議

如果你是普通用戶,直接用 獨(dú)立表空間 + KEY_BLOCK_SIZE=8 就夠了;如果是 DBA 管理多個大表,可以考慮 通用表空間 + 統(tǒng)一壓縮策略,但要嚴(yán)格遵守 FILE_BLOCK_SIZEKEY_BLOCK_SIZE 的匹配規(guī)則。

到此這篇關(guān)于MySQL壓縮表創(chuàng)建指南的文章就介紹到這了,更多相關(guān)mysql壓縮表創(chuàng)建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql常用基準(zhǔn)測試命令總結(jié)

    Mysql常用基準(zhǔn)測試命令總結(jié)

    在本篇文章中我們給大家分享了關(guān)于Mysql常用基準(zhǔn)測試命令的總結(jié)內(nèi)容,有需要的讀者們可以學(xué)習(xí)下。
    2018-10-10
  • MYSQL事務(wù)的隔離級別與MVCC

    MYSQL事務(wù)的隔離級別與MVCC

    這篇文章主要介紹了MYSQL事務(wù)的隔離級別與MVCC,文章首先通過事務(wù)的相關(guān)內(nèi)容展開主題主要介紹,具有一定的參考價值,需要的小伙伴可以參一下
    2022-05-05
  • mysql優(yōu)化之like和=性能詳析

    mysql優(yōu)化之like和=性能詳析

    這篇文章主要給大家介紹了關(guān)于mysql優(yōu)化之like和=性能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • MySQL大表數(shù)據(jù)碎片的判斷與整理優(yōu)化實戰(zhàn)指南

    MySQL大表數(shù)據(jù)碎片的判斷與整理優(yōu)化實戰(zhàn)指南

    在MySQL數(shù)據(jù)庫運(yùn)維過程中,大表的碎片問題是影響性能和磁盤空間利用率的常見痛點,刪除、更新數(shù)據(jù)后極易產(chǎn)生碎片,導(dǎo)致表文件臃腫、查詢變慢、磁盤空間浪費(fèi),本文將從碎片成因、判斷方法、整理操作、注意事項四個維度,手把手教你搞定MySQL大表碎片整理優(yōu)化
    2026-05-05
  • my.cnf(my.ini)重要參數(shù)優(yōu)化配置說明

    my.cnf(my.ini)重要參數(shù)優(yōu)化配置說明

    本文針對mysql不同存儲引擎,MyISAM與Innodb進(jìn)行了講解如何進(jìn)行my.cnf(my.ini)的參數(shù)優(yōu)化
    2018-03-03
  • Mysql、Oracle中常用的多表修改語句總結(jié)

    Mysql、Oracle中常用的多表修改語句總結(jié)

    這篇文章主要給大家介紹了關(guān)于Mysql、Oracle中常用的多表修改語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 關(guān)于MySQL數(shù)據(jù)庫死鎖的案例和解決方案

    關(guān)于MySQL數(shù)據(jù)庫死鎖的案例和解決方案

    MySQL Update語句防止死鎖是指在修改MySQL數(shù)據(jù)庫的數(shù)據(jù)時,為避免多個進(jìn)程同時修改同一數(shù)據(jù)行而造成死鎖的情況,引入了一些機(jī)制來防止死鎖的產(chǎn)生,本文介紹了一個 MySQL 數(shù)據(jù)庫死鎖的案例和解決方案,需要的朋友可以參考下
    2023-09-09
  • MySQL中的流式查詢及游標(biāo)查詢方式

    MySQL中的流式查詢及游標(biāo)查詢方式

    這篇文章主要介紹了MySQL中的流式查詢及游標(biāo)查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MySQL窗口函數(shù)的具體使用

    MySQL窗口函數(shù)的具體使用

    本文主要介紹了MySQL窗口函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • windows10+mysql8.0.11zip安裝教程詳解

    windows10+mysql8.0.11zip安裝教程詳解

    這篇文章主要介紹了windows10+mysql8.0.11zip安裝教程詳解,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下
    2018-05-05

最新評論

托克逊县| 奉节县| 额济纳旗| 皋兰县| 武宁县| 德阳市| 峨山| 东光县| 鸡泽县| 苍梧县| 商河县| 巧家县| 秭归县| 乌拉特中旗| 平凉市| 江北区| 饶阳县| 临沧市| 格尔木市| 富源县| 都昌县| 竹山县| 新宾| 辽阳市| 襄樊市| 建阳市| 嘉峪关市| 宁国市| 霸州市| 略阳县| 华池县| 台前县| 文安县| 青神县| 武城县| 柘荣县| 分宜县| 淳化县| 会理县| 隆昌县| 利川市|