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

mysql中ROW_FORMAT的選擇問題

 更新時(shí)間:2023年10月18日 15:00:34   作者:蠟津  
這篇文章主要介紹了mysql中ROW_FORMAT的選擇問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

文章中看到這樣一句話,引起了我的深思,然后去研究了一下 ROW_FORMAT

CHAR 與VARCHAR 之間的特點(diǎn)與選擇

CHAR和VARCHAR的區(qū)別如下:

1)、CHAR是固定長(zhǎng)度字符, VARCHAR是可變長(zhǎng)度字符;

2)、CHAR會(huì)自動(dòng)刪除插入數(shù)據(jù)的尾部空格, VARCHAR不會(huì)刪除尾部空格。 

CHAR是固定長(zhǎng)度,所以它的處理速度比VARCHAR的速度要快,但是它的缺點(diǎn)就是浪費(fèi)存儲(chǔ)空間。所以對(duì)存儲(chǔ)不大,但在速度上有要求的可以使用CHAR類型,反之可以使用VARCHAR類型來實(shí)現(xiàn)。

存儲(chǔ)引擎對(duì)于選擇CHAR和VARCHAR的影響

對(duì)于MyISAM存儲(chǔ)引擎:最好使用固定長(zhǎng)度的數(shù)據(jù)列代替可變長(zhǎng)度的數(shù)據(jù)列。這樣可以使整個(gè)表靜態(tài)化,從而使數(shù)據(jù)檢索更快,用空間換時(shí)間。

對(duì)于InnoDB存儲(chǔ)引擎:使用可變長(zhǎng)度的數(shù)據(jù)列,因?yàn)镮nnoDB數(shù)據(jù)表的存儲(chǔ)格式不分固定長(zhǎng)度和可變長(zhǎng)度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照實(shí)際的長(zhǎng)度存儲(chǔ),比較節(jié)省空間,所以對(duì)磁盤I/O和數(shù)據(jù)存儲(chǔ)總量比較好。 

在MySQL中,所謂Row_Format行格式是指數(shù)據(jù)記錄(或者稱之為行)在磁盤中的物理存儲(chǔ)方式。

MyISAM行存儲(chǔ)

MyISAM有3種行存儲(chǔ)格式:fixed/dynamic/compressed  

1、fixed:為默認(rèn)格式,只有當(dāng)表不包含變長(zhǎng)字段(varchar/varbinary/blob/text)時(shí)使用,該每行都是固定的,所以很容易獲取行在頁上的具體位置,存取效率比較高,但是占用磁盤空間較多

InnoDB行存儲(chǔ)  

Innodb plugin新引入Barracuda,其包含compressed/dynamic兩種行格式,而之前的compact/redundant統(tǒng)屬于antelope;

目前可選值為Antelope和Barracuda,低版本默認(rèn)為Antelope,高版本默認(rèn)為Barracuda。

1. Antelope: 它支持兩種行格式:COMPACT 和 REDUNDANT。MySQL5.6的默認(rèn)文件格式。可以與早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。

2. Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSED 和 DYNAMIC。

在 msyql 5.7.9 及以后版本,默認(rèn)行格式由innodb_default_row_format變量決定,它的默認(rèn)值是DYNAMIC,也可以在 create table 的時(shí)候指定ROW_FORMAT=DYNAMIC。用戶可以通過命令 SHOW TABLE STATUS LIKE'table_name' 來查看當(dāng)前表使用的行格式,其中 row_format 列表示當(dāng)前所使用的行記錄結(jié)構(gòu)類型。

如果要修改現(xiàn)有表的行模式為compressed或dynamic,必須先將文件格式設(shè)置成Barracuda:set global innodb_file_format=Barracuda;,再用ALTER TABLE tablename ROW_FORMAT=COMPRESSED;去修改才能生效。

InnoDB存儲(chǔ)引擎Compact、Redundant、Dynamic、Compressed主要區(qū)別

1)、compact、Dynamic、Compressed 行格式下,字段為NULL值是不會(huì)在記錄的數(shù)據(jù)內(nèi)容中占用存儲(chǔ)空間,冗余存儲(chǔ)的;

2)、redundant行格式下,如果值為NULL的字段類型為變長(zhǎng)數(shù)據(jù)類型,不會(huì)在記錄的數(shù)據(jù)內(nèi)容中占用任何空間來進(jìn)行存儲(chǔ)的,

如果值為NULL的字段類型為定長(zhǎng)數(shù)據(jù)類型,其使用0x00來填充該字段所需占用的空間。

例如char(10)類型的字段,在ascii、utf8字符集中其Maxlen值分別為1、3。即該字段在數(shù)據(jù)內(nèi)容部分會(huì)分別占用的10、30個(gè)字節(jié)。故當(dāng)該字段為NULL值時(shí),會(huì)使用0x00來填充這10、30個(gè)字節(jié)的位置。

行溢出

compact、redundant行格式中,如果該記錄某字段中數(shù)據(jù)量過多時(shí),則在該記錄的數(shù)據(jù)內(nèi)容的相應(yīng)字段處只存儲(chǔ)該字段值前768個(gè)字節(jié)的數(shù)據(jù)和一個(gè)指向存儲(chǔ)剩余數(shù)據(jù)的其他頁(即所謂的溢出頁)的地址,該地址通常占用20個(gè)字節(jié)。

Dynamic、Compressed行格式中,會(huì)把記錄中數(shù)據(jù)量過大的字段值全部存儲(chǔ)到溢出頁中,而不會(huì)在該記錄的數(shù)據(jù)內(nèi)容的相應(yīng)字段處存儲(chǔ)該字段值前768個(gè)字節(jié)的數(shù)據(jù)了。

而compressed相比較dynamic行格式來說,前者會(huì)使用壓縮算法對(duì)所有頁面(自然也包括溢出頁)進(jìn)行壓縮以減少存儲(chǔ)占用。

遇到過這樣一個(gè)問題,原因是InnoDB不支持ROW_FORMAT為FIXED。

mysql>  create table tmp11(id varchar(10)) ROW_FORMAT=FIXED;
ERROR 1031 (HY000): Table storage engine for 'tmp11' doesn't have this option
mysql> show variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql 獲取當(dāng)天發(fā)布的信息的語句

    mysql 獲取當(dāng)天發(fā)布的信息的語句

    mysql 獲取當(dāng)天發(fā)布的信息的實(shí)現(xiàn)語句,需要的朋友可以參考下。
    2010-03-03
  • MYSQL多表聯(lián)合查詢的示例詳解

    MYSQL多表聯(lián)合查詢的示例詳解

    這篇文章主要介紹了MySQL中的多表聯(lián)合查詢,包括交叉連接、內(nèi)連接、外連接和子查詢的分類、語法和示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • MySQL中的回表和索引覆蓋示例詳解

    MySQL中的回表和索引覆蓋示例詳解

    索引覆蓋是一種避免回表查詢的優(yōu)化策略,具體的做法就是將要查詢的數(shù)據(jù)作為索引列建立普通索,下面這篇文章主要給大家介紹了關(guān)于MySQL中回表和索引覆蓋的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Mysql添加、刪除、主鍵(外鍵)方法詳細(xì)講解

    Mysql添加、刪除、主鍵(外鍵)方法詳細(xì)講解

    MySQL是一種廣泛使用的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在數(shù)據(jù)庫設(shè)計(jì)中主鍵和外鍵是兩個(gè)重要的概念,下面這篇文章主要給大家介紹了關(guān)于Mysql添加、刪除、主鍵(外鍵)方法的相關(guān)資料,需要的朋友可以參考下
    2024-06-06
  • CentOS Linux更改MySQL數(shù)據(jù)庫目錄位置具體操作

    CentOS Linux更改MySQL數(shù)據(jù)庫目錄位置具體操作

    由于MySQL的數(shù)據(jù)庫太大,默認(rèn)安裝的/var盤已經(jīng)再也無法容納新增加的數(shù)據(jù),沒有辦法,只能想辦法轉(zhuǎn)移數(shù)據(jù)的目錄,本文整理了一些MySQL從/var/lib/mysql目錄下面轉(zhuǎn)移到/home/mysql_data/mysql目錄的具體操作,感興趣的你可不要走開啊
    2013-01-01
  • 深入mysql YEAR() MONTH() DAYOFMONTH()日期函數(shù)的詳解

    深入mysql YEAR() MONTH() DAYOFMONTH()日期函數(shù)的詳解

    本篇文章是對(duì)mysql中的YEAR() MONTH() DAYOFMONTH()日期函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL錯(cuò)誤“Data?too?long”的原因、解決方案與優(yōu)化策略

    MySQL錯(cuò)誤“Data?too?long”的原因、解決方案與優(yōu)化策略

    MySQL作為重要的數(shù)據(jù)庫系統(tǒng),在數(shù)據(jù)插入時(shí)可能遇到“Data?too?long?for?column”錯(cuò)誤,本文探討了該錯(cuò)誤的原因、解決方案及預(yù)防措施,如調(diào)整字段長(zhǎng)度、使用TEXT類型等,旨在優(yōu)化數(shù)據(jù)庫設(shè)計(jì),提升性能和用戶體驗(yàn),需要的朋友可以參考下
    2024-09-09
  • mysql關(guān)聯(lián)兩張表時(shí)的編碼問題及解決辦法

    mysql關(guān)聯(lián)兩張表時(shí)的編碼問題及解決辦法

    在本篇文章里小編給大家整理的是關(guān)于mysql關(guān)聯(lián)兩張表時(shí)的編碼問題及解決辦法,有需要的朋友們可以參考下。
    2019-09-09
  • MybatisPlus攔截器如何實(shí)現(xiàn)數(shù)據(jù)表分表

    MybatisPlus攔截器如何實(shí)現(xiàn)數(shù)據(jù)表分表

    為了解決MySQL中大數(shù)據(jù)量的查詢效率問題,采用水平拆分策略,通過取模運(yùn)算確定表后綴,實(shí)現(xiàn)數(shù)據(jù)的有效管理,設(shè)計(jì)分表時(shí),需利用線程變量存取請(qǐng)求參數(shù),并通過攔截器確定操作的具體表名,從而優(yōu)化數(shù)據(jù)處理性能,此方法適用于業(yè)務(wù)表數(shù)據(jù)量大或快速增長(zhǎng)的場(chǎng)景
    2024-11-11
  • SQL的substring_index()用法實(shí)例(MySQL字符串截取)

    SQL的substring_index()用法實(shí)例(MySQL字符串截取)

    substring_index?(字符串,分隔符,序號(hào)),主要作用是用于截取目標(biāo)字符串,下面這篇文章主要給大家介紹了關(guān)于SQL中substring_index()用法(MySQL字符串截取)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

湘乡市| 时尚| 岱山县| 关岭| 安平县| 昌图县| 巫山县| 佛冈县| 青岛市| 富阳市| 黔西县| 和龙市| 象州县| 布拖县| 金门县| 牙克石市| 衡南县| 当雄县| 来凤县| 马山县| 喜德县| 山阳县| 屏南县| 龙井市| 穆棱市| 武乡县| 尖扎县| 西华县| 兴安盟| 临沧市| 伊宁市| 竹山县| 密山市| 衡阳县| 鄂温| 金门县| 邛崃市| 广西| 东台市| 洛阳市| 县级市|