成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

詳解MySQL中的數據類型和schema優化

瀏覽:78日期:2023-10-10 11:00:59

最近在學習MySQL優化方面的知識。本文就數據類型和schema方面的優化進行介紹。

詳解MySQL中的數據類型和schema優化

1. 選擇優化的數據類型

MySQL支持的數據類型有很多,而如何選擇出正確的數據類型,對于性能是至關重要的。以下幾個原則能夠幫助確定數據類型:

更小的通常更好

應盡可能使用可以正確存儲數據的最小數據類型,夠用就好。這樣將占用更少的磁盤、內存和緩存,而在處理時也會耗時更少。

簡單就好

當兩種數據類型都能勝任一個字段的存儲工作時,選擇簡單的那一方,往往是最好的選擇。例如整型和字符串,由于整型的操作代價要小于字符,所以當在兩者之間選擇時,選擇整型通常能夠獲得更好的性能。

盡量避免NULL

當列可為NULL時,對于MySQL來說,在索引和值比較等方面需要做更多的工作,雖然對性能的影響不是很大,但也應盡量避免設計為可為NULL。

除了以上原則,在選擇數據類型時,需遵循的步驟:首先確定合適的大類型,例如數據、字符串、時間等;然后再選擇具體的類型。下面將討論大類型下的一些具體類型,首先是數字,有兩種類型:整數和實數。

1.1 整數類型

整數類型和所占用的空間如下:

整數類型 空間大?。╞it) TINYINT 8 SMALLINT 16 MEDIUMINT 24 INT 32 BIGINT 64

整數類型所能存儲的范圍和空間大小有關:-2^(N-1)至2^(N-1)-1,其中N為空間大小的位數。

整數類型具有UNSIGNED的可選屬性,當聲明時,表示不允許負數,則存儲范圍變為:0至2^(N)-1,擴大了一倍。

在MySQL中,還可以為整數類型指定寬度,例如INT(1),但這樣的意義并不大,并不會限制值的合法范圍,仍能存儲-2^31至2^31-1的值,所影響的是與MySQL的交互工具顯示字符的個數。

1.2 實數類型

實數類型的對比如下:

實數類型 空間大小(Byte) 取值范圍 計算精度 FLOAT 4 負數:-3.4E+38~-1.17E-38;非負數:0、1.17E-38~3.4E+38 近似計算 DOUBLE 8 負數:-1.79E+308~-2.22E-308;非負數:0、2.22E-308~1.79E+308 近似計算 DECIMAL 與精度有關 同DOUBLE 精確計算

從上面可以看出,FLOAT和DOUBLE都有固定的空間大小,但同時由于是使用標準的浮點運算,所以只能近似計算。而DECIMAL則可以實現精確計算,與此同時占用的空間會相較更大,所耗費的計算開銷也更多。

DECIMAL所占空間大小與指定的精度有關,例如DECIMAL(M,D):

M為整個數字的最大長度,取值范圍為[1, 65],默認值為10; D為小數點后的長度,取值范圍為[0, 30],且D <= M,默認值為0。

MySQL在存儲DECIMAL類型時會作為二進制字符串存儲,每4個字節存9個數字,當不足9位時,數字的占用空間如下:

數字個數 占用空間(Byte) 1、2 1 3、4 2 5、6 3 7、8 4

小數點前后將分別存儲,同時小數點也要占1個字節。下面舉兩個計算的例子:

DECIMAL(18, 9):整數部分長度為9,占用4個字節。小數部分長度為9,占用4個字節。同時加上小數點1個字節,則總共占用9個字節。 DECIMAL(20, 9):整數部分長度為14,占用7(4+3)個字節。小數部分長度為9,占用4個字節。同時加上小數點1個字節,則總共占用12個字節。

可以看出DECIMAL的空間占用還是很大的,因此只有當需要對小數進行精確計算時,才需要使用DECIMAL。除此之外,我們還可以使用BIGINT代替DECIMAL,例如需要保證小數點后5位的計算,可以將值乘上10的5次方后作為BIGINT存儲,這樣能同時避免浮點存儲計算不精確和DECIMAL精確計算代價高的問題。

1.3 字符串類型

最常用的字符串類型當屬VARCHAR和CHAR。 VARCHAR 作為 可變長字符串 ,會使用1或2個額外字節記錄字符串的長度,當最大長度未超過255時,只需1個字節記錄長度,超過255,則需2個字節。VARCHAR的 適用場景 :

最大長度比平均長度大很多; 列的更新少,避免碎片; 使用復雜的字符集,如UTF-8,每個字符能使用不同的字節存儲。

CHAR則為 定長字符串 ,根據定義的字符串長度分配足夠的空間, 適用場景 :

長度短; 長度相近,例如MD5; 經常更新。

除了VARCHAR和CHAR,針對存儲大字符串,可以使用BLOB和TEXT類型。BLOB和TEXT的區別在于, BLOB 是以 二進制 方式存儲,而 TEXT 是以 字符 方式存儲。這也導致,BLOB類型的數據沒有字符集的概念,無法按字符排序,而TEXT類型則有字符集的概念,可以按字符排序。兩者的使用場景,也由存儲格式決定了,當存儲二進制數據時,例如圖片,應使用BLOB,而存儲文本時,例如文章,則應使用TEXT類型。

1.4 日期和時間類型

MySQL中所能存儲的最小時間粒度為秒,常用的日期類型有DATETIME和TIMESTAMP。

類型 存儲內容 空間大?。˙yte) 時區概念 DATETIME 格式為YYYYMMDDHHMMSS的整數 8 無 TIMESTAMP 從1970年1月1日零點以來的秒數 4 有

TIMESTAMP顯示的值將依賴于時區,意味在不同時區查詢到的值將不一樣。除了以上列出的不同,TIMESTAMP還具有一個特殊屬性,在插入和更新時,如果沒有指定第一個TIMESTAMP列的值,將會設置這個列的值為當前時間。

我們在開發過程中,應盡量使用TIMESTAMP,主要是因為其空間大小僅需DATETIME的一半,空間效率更高。

如果我們想存儲的日期和時間精確到秒之后,怎么辦?由于MySQL并未提供,所以我們可以使用BIGINT存儲微妙級別的時間戳,或者使用DOUBLE存儲秒之后的小數部分。

1.5 選擇標識符

通常來說整數是標識符的最好選擇,主要是因為其簡單,計算快,且可使用AUTO_INCREMENT。

2. 范式和反范式

簡單來說,范式就是一張數據表的表結構所符合的某種設計標準的級別。第一范式,屬性不可分割,現在的RDBMS系統建成的表都是符合第一范式的。而第二范式,則是消除非主屬性對碼(可以理解為主鍵)的部分依賴。第三范式消除非主屬性對碼的傳遞依賴。

嚴格 范式化 的數據庫中,每個事實數據會出現且只出現一次, 不會出現數據冗余 ,這樣所能帶能帶來的好處有:

更新操作更快; 修改更少的數據; 表更小,更好地放內存中,執行操作更快; 更少需要DISTINCT或GROUP BY。

但也由于數據分散存在各張表中,查詢時需要對表進行關聯。而 反范式 的優點則是 不用進行關聯 ,將數據冗余存儲。

在實際應用中,不會出現完全的范式化或完全的反范式化,時常需要 混用范式和反范式 ,使用部分范式化的schema,往往是最好的選擇。關于數據庫設計,在網上看到這樣一段話,大家可以感受下。

數據庫設計應該分為三個境界:

第一境界:剛入門數據庫設計,范式的重要性還未深刻理解。這時候出現的反范式設計,一般會出問題。

第二境界:隨著遇到問題解決問題,漸漸了解到范式的真正好處,從而能快速設計出低冗余、高效率的數據庫。

第三境界:再經過N年的鍛煉,是一定會發覺范式的局限性的。此時再去打破范式,設計更合理的反范式部分。

范式就像武俠里面的招數,初學者妄想不按招數來,只能死的很難堪。畢竟招數都是高手總結歸納的精華。而隨著武功提高,招數熟練之后,必然是發現招數的局限性,要么忘掉招數,要么自創招數。

只要努力,加上多熬幾年,總能達到第二個境界,總會覺得范式是經典。此時能不過分依賴范式,快速突破范式局限性的人,自然是高手。

3. 緩存表和匯總表

除了上述說到的反范式,在表中存儲冗余數據,我們還可以創建一張完全獨立的匯總表或緩存表,來滿足檢索的需要。

緩存表,指的是存儲可以從schema其他表中獲取數據的表,也就是邏輯上冗余的數據。而 匯總表 ,則指的是存儲使用GROUP BY等語句聚合數據,計算出的不冗余的數據。

緩存表,可用于 優化搜索和檢索查詢語句 ,這里可以使用的技巧有對緩存表使用不同的存儲引擎,例如主表使用InnoDB,而緩存表則可使用MyISAM,獲得更小的索引占用空間。甚至可以將緩存表放到專門的搜索系統中,例如Lucene。

匯總表,則是為了 避免實時計算統計值所帶來的高昂代價 ,代價來自兩方面,一是需要掃描表中的大部分數據,二是建立特定的索引,會對UPDATE操作有影響。例如,查詢微信過去24小時的朋友圈數量,則可固定每1小時掃描全表,統計后寫一條記錄到匯總表,當查詢時,只需查詢匯總表上最新的24條記錄,而不必每次查詢時都去掃描全表進行統計。

在使用緩存表和匯總表時,必須決定是 實時維護數據 還是 定期重建 ,這取決于我們的需求。定期重建相比實時維護,能節省更多的資源,表的碎片更少。而在重建時,我們仍需保證數據在操作時可用,需要通過“ 影子表 ”來實現。在真實表后創建一張影子表,當填充好數據后,通過原子的重命名操作來切換影子表和原表。

4. 加快ALTER TABLE操作的速度

當MySQL在執行ALTER TABLE操作時,往往是新建一張表,然后把數據從舊表查出并插入到新表中,再刪除舊表,如果表很大,這樣需要花費很長時間,且會導致MySQL的服務中斷。為了避免服務中斷,通??梢允褂?兩種技巧 :

在一臺不提供服務的機器上執行ALTER TABLE操作,然后再與提供服務的主庫進行切換;“影子拷貝”,建立一張與原表無關的新表,在數據遷移完成后,通過重命名操作進行切換。但也 不是所有的ALTER TABLE操作會引起表重建 ,例如在修改字段的默認值時,使用MODIFY COLUMN會進行表重建,而使用ALTER COLUMN則不會進行表重建,操作速度很快。這是因為ALTER COLUMN在修改默認值時,會直接修改了存在表的.frm文件(存儲字段的默認值),而并未重建表。

參考

《高性能MySQL》

MySQL DECIMAL 數據類型

以上就是詳解MySQL中的數據類型和schema優化的詳細內容,更多關于MySQL 數據類型和schema優化的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品国产精品一区二区夜夜嗨| 福利一区在线观看| 蜜桃视频一区二区| 国产精品美女久久久| 日韩毛片视频在线看| 欧美尤物一区| 久久亚洲私人国产精品va媚药| 成人激情免费电影网址| 日韩一级完整毛片| 成人精品视频一区二区三区尤物| 欧美福利视频一区| 激情综合色播五月| 在线观看精品一区| 免费高清在线一区| 欧美日韩高清在线播放| 日韩成人免费电影| 亚洲一区bb| 视频一区二区三区在线| 亚洲一区二区在| 五月天激情综合| 欧美色精品在线视频| 免费在线欧美视频| 欧美理论片在线| 国产成人精品三级| 日韩精品资源二区在线| 99精品视频一区二区| 2024国产精品视频| 91视频在线看| 亚洲色图视频网站| 一区二区三区四区五区精品视频| 专区另类欧美日韩| 99精品福利视频| 一个色在线综合| 一本一道综合狠狠老| 日韩黄色在线观看| 欧美乱妇20p| 成人av在线网站| 国产亚洲欧美一级| 亚洲三级影院| 亚洲一区在线观看视频| 日本高清不卡aⅴ免费网站| 七七婷婷婷婷精品国产| 欧美视频第二页| 国产999精品久久久久久| 久久精品夜色噜噜亚洲a∨| 欧美在线视频一区二区三区| 亚洲欧洲成人精品av97| 国语对白精品一区二区| 一区二区三区在线观看网站| 色狠狠色狠狠综合| 国内精品不卡在线| 精品国产一区二区三区久久久蜜月 | 中文字幕一区二区三区视频 | 日韩精品影音先锋| 午夜久久资源| 一区二区三区不卡在线观看| 亚洲综合二区| 久久成人久久鬼色| 久久综合久久99| 1024成人| 青青草91视频| 欧美成人bangbros| 国内精品久久久久久久果冻传媒| 洋洋av久久久久久久一区| 欧美视频一二三区| 欧美+亚洲+精品+三区| 午夜不卡av免费| 日韩午夜精品视频| 在线观看亚洲| 久久99蜜桃精品| 久久网这里都是精品| 亚洲精品社区| 免费看精品久久片| 日韩一级高清毛片| 亚洲人久久久| 美女视频黄久久| 亚洲国产成人私人影院tom| 亚洲欧美春色| 国产盗摄女厕一区二区三区| 亚洲天堂福利av| 色欲综合视频天天天| 成人激情开心网| 一级中文字幕一区二区| 欧美精品丝袜中出| 亚洲高清视频一区二区| 精品一区二区三区在线视频| 欧美电影免费观看高清完整版| 亚洲黄色视屏| 精品在线观看免费| 国产精品网站一区| 欧美午夜精品久久久久久超碰| 91视频xxxx| 日韩高清电影一区| 欧美国产激情一区二区三区蜜月 | 欧美日韩mv| 五月综合激情婷婷六月色窝| 精品国产一区二区三区四区四| 午夜亚洲一区| 成人高清免费观看| 天天爽夜夜爽夜夜爽精品视频| 久久蜜桃一区二区| 色欧美日韩亚洲| 极品av少妇一区二区| 国产一区二区三区不卡在线观看 | 东方aⅴ免费观看久久av| 亚洲一级二级三级| 日韩女同互慰一区二区| 一本色道久久综合一区| 全国精品久久少妇| 中文字幕国产一区| 欧美日韩久久不卡| 亚洲免费在线| 欧美精品一区在线| 国产一区二区按摩在线观看| 亚洲综合在线视频| 2019国产精品| 欧美男男青年gay1069videost| 亚洲国产精品久久久久婷婷老年 | 久久精品国产99精品国产亚洲性色| 成人激情免费视频| 麻豆国产精品官网| 一区二区三区在线视频免费观看| 久久亚洲综合av| 欧美另类变人与禽xxxxx| 国产精品社区| 亚洲国产日韩综合一区| 91最新地址在线播放| 精东粉嫩av免费一区二区三区| 午夜精品福利在线| 亚洲视频每日更新| 久久综合九色欧美综合狠狠| 欧美丰满少妇xxxxx高潮对白| 在线欧美日韩| 97se亚洲国产综合自在线| 国产精品资源在线| 日韩综合小视频| 亚洲一区av在线| 国产精品天天看| 久久蜜臀中文字幕| 精品国免费一区二区三区| 欧美精品少妇一区二区三区| 91久久精品一区二区二区| 亚洲一区二区三区午夜| 一区二区冒白浆视频| 国产精品xnxxcom| 欧美成人日韩| 成人av电影观看| 高清在线观看日韩| 毛片基地黄久久久久久天堂| 午夜激情一区二区三区| 亚洲电影一级片| 亚洲午夜视频在线| 一区二区三区视频在线看| 亚洲欧美中日韩| 亚洲乱码日产精品bd| 亚洲欧美国产三级| 亚洲欧洲综合另类| 中文字幕日韩av资源站| 国产精品久久久久四虎| 欧美国产禁国产网站cc| 中文字幕第一页久久| 国产精品久久久久永久免费观看 | 最新亚洲一区| 午夜精品一区二区在线观看| 欧美粗暴jizz性欧美20| 91丨九色丨黑人外教| 99精品视频在线免费观看| www.欧美日韩国产在线| 97久久超碰国产精品| 色综合视频在线观看| 欧美日韩在线一二三| 欧美在线网站| 欧美在线日韩精品| 欧美黄污视频| 成人理论电影网| 国产福利一区二区三区视频在线 | 亚洲麻豆一区| 一区二区高清视频| 一区二区三区成人精品| 伊人久久av导航| 亚洲高清资源综合久久精品| 亚洲欧洲日韩综合二区| 91麻豆国产香蕉久久精品| 欧美激情性爽国产精品17p| 国产剧情在线观看一区二区| 国产夫妻精品视频| 欧美一区激情| 欧美三级第一页| 亚洲小说欧美另类婷婷| 欧美另类亚洲| 韩国av一区| 国产欧美日韩一区二区三区在线| 亚洲大胆在线| 久久久久高清| 久久精品在线| 3d动漫精品啪啪1区2区免费| 精品视频在线免费看| 欧美r级在线观看| 久久影视一区二区| 久久精品视频在线看|