校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化

詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化

熱門標簽:廣東人工電話機器人 芒果電話機器人自動化 南通自動外呼系統(tǒng)軟件 石家莊電商外呼系統(tǒng) 申請外呼電話線路 百度地圖圖標標注中心 信陽穩(wěn)定外呼系統(tǒng)運營商 湖南人工外呼系統(tǒng)多少錢 日照旅游地圖標注

最近在學習MySQL優(yōu)化方面的知識。本文就數(shù)據(jù)類型和schema方面的優(yōu)化進行介紹。

1. 選擇優(yōu)化的數(shù)據(jù)類型

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

  • 更小的通常更好

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

  • 簡單就好

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

  • 盡量避免NULL

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

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

1.1 整數(shù)類型

整數(shù)類型和所占用的空間如下:

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

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

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

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

1.2 實數(shù)類型

實數(shù)類型的對比如下:

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

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

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

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

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

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

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

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

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

1.3 字符串類型

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

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

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

  • 長度短;
  • 長度相近,例如MD5;
  • 經(jīng)常更新。

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

1.4 日期和時間類型

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

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

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

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

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

1.5 選擇標識符

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

2. 范式和反范式

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

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

  • 更新操作更快;
  • 修改更少的數(shù)據(jù);
  • 表更小,更好地放內(nèi)存中,執(zhí)行操作更快;
  • 更少需要DISTINCT或GROUP BY。

但也由于數(shù)據(jù)分散存在各張表中,查詢時需要對表進行關聯(lián)。而 反范式 的優(yōu)點則是 不用進行關聯(lián) ,將數(shù)據(jù)冗余存儲。

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

數(shù)據(jù)庫設計應該分為三個境界:

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

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

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

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

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

3. 緩存表和匯總表

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

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

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

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

在使用緩存表和匯總表時,必須決定是 實時維護數(shù)據(jù) 還是 定期重建 ,這取決于我們的需求。定期重建相比實時維護,能節(jié)省更多的資源,表的碎片更少。而在重建時,我們?nèi)孕璞WC數(shù)據(jù)在操作時可用,需要通過“ 影子表 ”來實現(xiàn)。在真實表后創(chuàng)建一張影子表,當填充好數(shù)據(jù)后,通過原子的重命名操作來切換影子表和原表。

4. 加快ALTER TABLE操作的速度

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

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

參考

《高性能MySQL》

MySQL DECIMAL 數(shù)據(jù)類型

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

您可能感興趣的文章:
  • mysql decimal數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)
  • mysql 數(shù)據(jù)類型轉(zhuǎn)換的實現(xiàn)
  • MySQL數(shù)據(jù)類型DECIMAL用法詳解
  • mysql中decimal數(shù)據(jù)類型小數(shù)位填充問題詳解
  • MySQL數(shù)據(jù)類型全解析
  • 基于PostgreSQL和mysql數(shù)據(jù)類型對比兼容
  • MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應關系說明
  • MySQL 數(shù)據(jù)類型選擇原則

標簽:天津 公主嶺 沈陽 呼和浩特 合肥 阿里 牡丹江 惠州

巨人網(wǎng)絡通訊聲明:本文標題《詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化》,本文關鍵詞  詳解,MySQL,中的,數(shù)據(jù),類型,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化》相關的同類信息!
  • 本頁收集關于詳解MySQL中的數(shù)據(jù)類型和schema優(yōu)化的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲一区二区三区美女| 中文字幕一区二区三区色视频 | 在线播放欧美女士性生活| 99久久婷婷国产精品综合| 成人永久看片免费视频天堂| 国产一区91精品张津瑜| 国产一区亚洲一区| 国产专区综合网| 福利一区福利二区| 波多野结衣中文一区| 夫妻av一区二区| av成人免费在线| 色8久久人人97超碰香蕉987| 日本高清无吗v一区| 欧美嫩在线观看| 欧美丰满高潮xxxx喷水动漫| 日韩欧美中文一区| 26uuu另类欧美| 中文子幕无线码一区tr| 亚洲欧美另类小说视频| 亚洲午夜电影在线观看| 五月天欧美精品| 蜜桃一区二区三区在线| 韩国视频一区二区| 99这里只有久久精品视频| 91久久精品一区二区三区| 日韩午夜激情免费电影| 精品区一区二区| 中文字幕一区二区在线播放| 亚洲一区二区免费视频| 美女视频网站久久| 福利视频网站一区二区三区| 色综合色狠狠综合色| 91精品在线一区二区| 亚洲精品一区在线观看| 亚洲欧美在线视频观看| 视频一区中文字幕| 国产精品66部| 欧美系列日韩一区| 欧美成人伊人久久综合网| 国产精品污网站| 五月天亚洲婷婷| 成人精品高清在线| 在线不卡的av| 中文幕一区二区三区久久蜜桃| 亚洲在线视频网站| 紧缚奴在线一区二区三区| av中文字幕在线不卡| 91精品国产综合久久久蜜臀粉嫩 | 国产成人免费视频精品含羞草妖精| 不卡在线观看av| 日韩一区二区三区av| 久久久久9999亚洲精品| 亚洲国产欧美日韩另类综合 | 日韩精品一级二级 | 久久你懂得1024| 一区二区三区 在线观看视频| 久99久精品视频免费观看| 色综合久久88色综合天天6| 欧美成人一区二区| 一区二区三区高清在线| 国产激情精品久久久第一区二区| 欧美色区777第一页| 国产精品第五页| 久久av老司机精品网站导航| 91国产精品成人| 久久色成人在线| 偷拍亚洲欧洲综合| jlzzjlzz亚洲日本少妇| 精品国产精品一区二区夜夜嗨| 亚洲一区免费视频| 91在线视频网址| 国产三级一区二区| 久久爱另类一区二区小说| 欧美精品乱人伦久久久久久| 亚洲少妇中出一区| 国产99一区视频免费| 日韩精品一区二区三区视频| 午夜久久久久久电影| 在线观看日韩电影| 亚洲人成伊人成综合网小说| 国产电影一区二区三区| 日韩免费看的电影| 视频一区在线视频| 欧美日韩黄色影视| 亚洲一区影音先锋| 色噜噜狠狠色综合中国| 国产精品国产三级国产有无不卡 | 久久午夜色播影院免费高清| 美女视频网站黄色亚洲| 国产精品乱码人人做人人爱 | 欧美影院一区二区三区| 亚洲男人天堂av网| 色综合久久九月婷婷色综合| 亚洲色图.com| 91麻豆免费在线观看| 国产精品久久久久永久免费观看| 国产一区二区不卡在线| 337p粉嫩大胆色噜噜噜噜亚洲 | 欧美优质美女网站| 亚洲视频中文字幕| 色噜噜夜夜夜综合网| 亚洲激情欧美激情| 91久久一区二区| 一区二区三区不卡在线观看| 色天使色偷偷av一区二区| 亚洲男女一区二区三区| 色88888久久久久久影院按摩| 亚洲精品视频在线观看网站| 日本精品免费观看高清观看| 亚洲夂夂婷婷色拍ww47| 欧美三级资源在线| 日本成人在线网站| 日韩欧美精品三级| 国产真实乱偷精品视频免| 国产亚洲精品中文字幕| 成人av网站在线观看| 亚洲日本在线视频观看| 91成人在线精品| 亚洲电影一区二区三区| 在线不卡一区二区| 国产在线日韩欧美| 国产精品久线在线观看| 色综合天天性综合| 五月激情综合网| 日韩欧美国产一区二区在线播放 | 久久久久久久综合日本| 风间由美中文字幕在线看视频国产欧美| 国产欧美精品在线观看| 91在线观看高清| 亚洲gay无套男同| 日韩一区二区三区三四区视频在线观看 | 欧美剧在线免费观看网站| 免费看欧美女人艹b| 国产午夜精品理论片a级大结局| 99综合影院在线| 日韩高清国产一区在线| 久久精品在这里| 日本韩国视频一区二区| 秋霞成人午夜伦在线观看| 欧美极品xxx| 欧美自拍偷拍一区| 久久成人18免费观看| 亚洲欧美视频一区| 日韩欧美国产综合一区 | 亚洲成av人片一区二区| 久久亚洲精华国产精华液 | 国产精品免费av| 91精品久久久久久蜜臀| 国产成人免费视频一区| 一区二区高清免费观看影视大全| 日韩欧美一区在线| 99re这里都是精品| 日本亚洲欧美天堂免费| 国产精品电影一区二区| 日韩一二在线观看| 99国产精品久久久| 毛片一区二区三区| 亚洲乱码日产精品bd| 亚洲精品在线观| 欧美精选一区二区| av在线播放成人| 精品一区二区影视| 亚洲色图一区二区| 久久免费偷拍视频| 在线成人av影院| 色综合网色综合| 国产成人在线观看免费网站| 性欧美大战久久久久久久久| 中文字幕一区二区三区视频| 欧美va亚洲va香蕉在线 | 亚洲福利视频导航| 国产精品毛片久久久久久久| 欧美变态口味重另类| 欧美亚洲另类激情小说| 波多野结衣欧美| 美女www一区二区| 一区二区欧美精品| 国产精品国模大尺度视频| 久久婷婷一区二区三区| 91精品国产一区二区三区香蕉| 色婷婷亚洲一区二区三区| 国产精选一区二区三区| 久久99精品国产.久久久久| 五月天视频一区| 亚洲国产色一区| 亚洲欧美一区二区不卡| 国产精品欧美一区二区三区| 久久噜噜亚洲综合| 精品电影一区二区三区| 日韩一级片在线播放| 欧美精品第1页| 欧美日韩二区三区| 在线一区二区三区四区| av电影在线观看一区| 成人黄色电影在线 | 91美女在线看| 91香蕉视频mp4| 日本高清不卡aⅴ免费网站| 99re视频精品|