欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)類型優(yōu)化原則

 更新時間:2020年11月16日 11:36:26   作者:Adios  
這篇文章主要介紹了MySQL數(shù)據(jù)類型優(yōu)化原則的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下

MySQL支持的數(shù)據(jù)類型很多,選擇正確的數(shù)據(jù)類型對于高性能至關(guān)重要。下面幾個簡單的原則都有助于做出更好的選擇。

  • 更小的通常更好

應(yīng)該盡量使用可以正確儲存數(shù)據(jù)的最小數(shù)據(jù)類型。更小的數(shù)據(jù)類型通常更快,因為它們占用更少的磁盤、內(nèi)存和CPU緩存,并且處理時需要的CPU周期也更少。如果無法確定哪個數(shù)據(jù)類型時最好的,就選擇你認為不會超過范圍的最小類型。

  • 簡單就好

簡單數(shù)據(jù)類型的操作通常需要更少的CPU周期。例如,整形比字符操作代價更低,因為字符集和校對規(guī)則(排序規(guī)則)使字符比較比整形更復(fù)雜。比如用MySQ內(nèi)建的類型而不是使用字符串來存儲日期和時間、應(yīng)該用整形存儲IP地址。

  • 盡量避免null

如果查詢中包含可為null的列,對MySQL來說更難優(yōu)化,因為可為null的列使得索引、索引統(tǒng)計和值比較都較為復(fù)雜??蔀閚ull的列會使用更多的存儲空間,在MySQL里也需要特殊處理。當可為null當列被索引時,每個索引記錄需要一個額外的字節(jié),在MyISAM里甚至還可能導致固定大小的索引變成可變大小的索引。

通常把可為null的列改為not null帶來的性能提升比較小,所以沒有必要在現(xiàn)有的架構(gòu)中查找并修改這種情況,除非確定這回導致問題。

例外的是在InnoDB使用獨立的位存儲null值,所以對于稀疏數(shù)據(jù)(很多值為null,只有少數(shù)行的列有非null值)有很好的空間效率,但這一點不適用于MyISAM。

在為列選擇數(shù)據(jù)類型時。

第一步需要確定合適的大類型:數(shù)字、字符串、時間等
第二步是選擇具體類型。MySQL的很多數(shù)據(jù)類型都可以存儲相同類型的數(shù)據(jù),只是存儲的長度和范圍不一樣、允許的精度不一樣,或者需要的物理空間不同。

整數(shù)類型

存儲整數(shù)可以用這幾種類型

類型 存儲位數(shù)
tinyint 8
smallint 16
mediumint 24
int 32
bigint 64

它們可以存儲的值的范圍-2^(N-1)^到2^(N-1)^-1,其中N是存儲空間的位數(shù)。
整數(shù)類型還有可選有符號屬性,表示不允許負值,這可以使正數(shù)的上限提高一倍。如tinyint無符號可以存儲的范圍是0到255,但他允許負值但存儲范圍是-128到127。

MySQL選擇不同的整數(shù)類型是決定怎么在內(nèi)存和磁盤中保存數(shù)據(jù)的。但是在整數(shù)計算一般使用64位但bigint整數(shù),即使32位環(huán)境也是一樣。(除了聚合函數(shù))

MySQL還可以為整數(shù)類型指定寬度。如int(11),但是它不會限制值的合法范圍,只是規(guī)定了MySQL的一些交互工具(如SQLyog,navicat)用來顯示字符的個數(shù)。對于存儲和計算來說,int(1)和int(11)是相同的。

實數(shù)類型

實數(shù)是帶有小數(shù)部分的類型。MySQL中可以用decimal、float和double來存儲實數(shù)類型。

float和double類型支持使用標準的浮點運算進行近似計算。
decimal類型用于存儲精確的小數(shù),在MySQL5.0以及更高的版本中,MySQL服務(wù)器自身實現(xiàn)了decimal的高精度計算。

浮點類型在存儲同樣范圍的值時,通常比decimal使用更少的空間。float使用4個字節(jié)存儲,double使用8個字節(jié)存儲,相比flaot有更高的精度和更大的范圍。在浮點計算時,MySQL都使用的double作為內(nèi)部浮點計算的類型。

在考慮對小數(shù)進行精確計算時,使用decimal(如財務(wù)數(shù)據(jù)),但在數(shù)據(jù)量大時,可以考慮使用bigint代替decimal,將需要存儲但貨幣單位根據(jù)小數(shù)的位數(shù)乘以相同的倍數(shù)存儲。這樣可以避免decimal精確計算代價高的問題。

float和double使用的是cpu支持的原生浮點計算,所以快。
decimal是MySQL服務(wù)器自身實現(xiàn)的高精度計算。

字符串類型

varchar和char是兩種最主要的字符串類型。

varchar

varchar類型用于存儲可變長字符串,是最常見的字符串數(shù)據(jù)類型。它比定長類型更節(jié)省空間,因為它僅使用必要的空間。

varchar需要使用1個或2個額外字節(jié)記錄字符串長度:如果列的最大長度小于或等于255字節(jié),則只使用1個字節(jié)表示,否則使用2個字節(jié)。

varchar節(jié)省了存儲空間,所以對性能也有幫助。但是,由于行是變長的,在update時可能使行變得比原來更長,這就導致需要做額外的工作。因為行占用的空間增長,并且在頁內(nèi)沒有更多的空間可以存儲。這種情況下,MyISAM會將行拆成不同的片段存儲,InnoDB需要分裂頁來使行可以放進頁內(nèi)。其他一些存儲引擎也許不在原數(shù)據(jù)位置更新數(shù)據(jù)。

使用varchar最合適的場景是:在字符串列的最大長度比平均長度大很多;列更新很少(碎片不是問題);使用了像utf-8這樣復(fù)雜的字符集,每個字符都使用不同的字節(jié)數(shù)進行存儲。

使用varchar(5)和varchar(200)存儲‘hello'的空間開銷是一樣的,但是使用更長的列會消耗更多的內(nèi)存,MySQL通常會分配固定大小的內(nèi)存快來保存內(nèi)部值。尤其是使用內(nèi)存臨時表進行排序或操作時會特別糟糕,在利用磁盤臨時表進行排序同樣糟糕。所以最好的策略是只分配真正需要的空間。

char

char類型是定長的。MySQL總是根據(jù)定義的字符串長度分配足夠的空間。當存儲char值時,MySQL會刪除所有的末尾空格。char值會根據(jù)需要采用空格進行填充以方便比較。

char適合存儲很短的字符串,或者所有值都接近同一個長度。例如密碼的MD5值。對于經(jīng)常變更的數(shù)據(jù),char也比varchar更好,因為定長的char不容易產(chǎn)生碎片。對于非常短的列,char比varchar在存儲空間上也更有效率,因為varchar需要額外字節(jié)記錄長度。

以上就是MySQL數(shù)據(jù)類型優(yōu)化原則的詳細內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)類型優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL存儲文本和圖片的方法

    MySQL存儲文本和圖片的方法

    今天小編就為大家分享一篇關(guān)于MySQL存儲文本和圖片的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Win中安裝mysql的詳細步驟

    Win中安裝mysql的詳細步驟

    這篇文章主要為大家詳細介紹了Win中安裝mysql的詳細步驟,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL數(shù)據(jù)庫中表的操作詳解

    MySQL數(shù)據(jù)庫中表的操作詳解

    這篇文章主要為大家詳細介紹了MySQL數(shù)據(jù)庫中表常用的一些操作方法,文中的示例代碼講解詳細,?對我們學習MySQL有一定幫助,需要的可以參考一下
    2022-08-08
  • MySQL transaction事務(wù)安全示例講解

    MySQL transaction事務(wù)安全示例講解

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫事務(wù)安全transaction的示例講解教程,事務(wù)就是將一組操作封裝成一個執(zhí)行單元,要么一塊執(zhí)行成功,要么一塊失敗,不存在部分執(zhí)行成功的情況。事務(wù)保證了執(zhí)行的穩(wěn)定性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-06-06
  • mysql?sql常用語句大全

    mysql?sql常用語句大全

    這篇文章主要介紹了mysql?sql常用語句大全,主要包括操作數(shù)據(jù)庫的命令,修改表的命令及對數(shù)據(jù)庫的操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • MySql安裝與配置方法(MySQL添加用戶、刪除用戶與授權(quán))

    MySql安裝與配置方法(MySQL添加用戶、刪除用戶與授權(quán))

    這篇文章主要介紹了MySql安裝與配置方法(MySQL添加用戶、刪除用戶與授權(quán))的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 使用navicat 8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導入數(shù)據(jù) 管理用戶與權(quán)限[圖文方法]

    使用navicat 8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導入數(shù)據(jù) 管理用戶與權(quán)限[圖文方法]

    使用navicat8實現(xiàn)創(chuàng)建數(shù)據(jù)庫和導入數(shù)據(jù)的方法,需要的朋友可以參考下。
    2011-04-04
  • MySQL怎么給字符串字段加索引

    MySQL怎么給字符串字段加索引

    本文主要介紹了MySQL怎么給字符串字段加索引,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • mysql數(shù)據(jù)表按照某個字段分類輸出

    mysql數(shù)據(jù)表按照某個字段分類輸出

    這篇文章主要介紹了mysql數(shù)據(jù)表按照某個字段分類輸出的方法,十分的簡單實用,需要的朋友可以參考下
    2015-07-07
  • MySQL數(shù)據(jù)庫數(shù)據(jù)視圖

    MySQL數(shù)據(jù)庫數(shù)據(jù)視圖

    這篇文章主要介紹了MySQL數(shù)據(jù)庫數(shù)據(jù)視圖,視圖是原始數(shù)據(jù)庫數(shù)據(jù)的一種變換,是查看表中數(shù)據(jù)的另外一種方式,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08

最新評論