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

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

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

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

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

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

?? 一句話總結(jié)

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

?? 一、支持壓縮的表空間類(lèi)型回顧

表空間類(lèi)型是否支持壓縮說(shuō)明
? 文件獨(dú)立表空間(.ibd 文件)每個(gè)表一個(gè)文件,默認(rèn)開(kāi)啟
? 通用表空間(General Tablespace)多個(gè)表共享一個(gè) .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)建語(yǔ)句:

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

?? 參數(shù)說(shuō)明:

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

?? 實(shí)際磁盤(pán)上的頁(yè)會(huì)被壓縮到接近這個(gè)大?。ㄈ缭?16KB → 壓縮成 ~8KB)

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

這是重點(diǎn),比獨(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:表示這個(gè)表空間的 物理塊大小是 8KB
  • 單位是 字節(jié)(注意!和 KEY_BLOCK_SIZE 不同)

? 步驟 2:創(chuàng)建表時(shí),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

? 如果不匹配?→ 報(bào)錯(cuò)!

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

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

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

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

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

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

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

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

3?? 如何選擇最佳KEY_BLOCK_SIZE?

文檔建議:

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

? 推薦做法:

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

?? 經(jīng)驗(yàn)值:

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

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

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

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

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

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

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

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

    • KEY_BLOCK_SIZE=16 → 通常壓縮率很低(因?yàn)樵柬?yè)就是 16KB)
    • 但對(duì) 包含大量 BLOB/TEXT 的表 仍可能有效,因?yàn)檫@些字段會(huì)存到“溢出頁(yè)”(off-page),壓縮后可減少溢出頁(yè)數(shù)量
  • 對(duì)于通用表空間:

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

7?? 所有索引都會(huì)被壓縮

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

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

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

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

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

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

?? 記住:KEY_BLOCK_SIZE = FILE_BLOCK_SIZE / 1024

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

場(chǎng)景:在通用表空間中創(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 自動(dòng)啟用

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

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

?? 一句話建議

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

施甸县| 金沙县| 尼勒克县| 吉木萨尔县| 固安县| 武清区| 松阳县| 淮北市| 宜章县| 红桥区| 景谷| 闵行区| 中方县| 铅山县| 林州市| 海伦市| 乐至县| 迁西县| 合水县| 铜鼓县| 兴安县| 丹东市| 富锦市| 平武县| 屯昌县| 犍为县| 龙门县| 信宜市| 旺苍县| 开鲁县| 彭阳县| 犍为县| 屏东县| 滦平县| 高雄县| 利川市| 永和县| 霞浦县| 巴林左旗| 博乐市| 嵊州市|