久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質的職業(yè)教育機構

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領取全套視頻
        千鋒教育

        關注千鋒學習站小程序
        隨時隨地免費學習課程

        當前位置:首頁  >  技術干貨  > MySQL庫表結構優(yōu)化

        MySQL庫表結構優(yōu)化

        來源:千鋒教育
        發(fā)布人:zyh
        時間: 2023-06-12 13:45:00 1686548700

          全文大約【2083】字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富案例及配圖視頻,讓你更好的理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考......

          一. 數(shù)據庫結構優(yōu)化

          數(shù)據庫的庫表結構優(yōu)化包含很多內容,例如:字段類型優(yōu)化、垂直分表、水平分表、表分區(qū)、分庫等內容。下面小編就帶各位小伙伴一起分析下具體內容。

          1.字段類型優(yōu)化

          字段類型優(yōu)化的目的是將字段類型設置的更合理一些,小編總結的規(guī)則如下:

          ● 盡量將表字段定義為NOT NULL約束,這時由于在MySQL中含有空值的列很難進行查詢優(yōu)化,NULL值會使索引以及索引的統(tǒng)計信息變得很復雜。

        MySQL庫表結構優(yōu)化

          ● 對于只包含特定類型的字段,可以使用enum、set 等數(shù)據類型。

          ● 數(shù)值型字段的比較比字符串的比較效率高得多,字段類型盡量使用最小、最簡單的數(shù)據類型。例如IP地址可以使用int類型。

          ● 盡量使用TINYINT、SMALLINT、MEDIUM_INT作為整數(shù)類型而非INT,如果非負則加上UNSIGNED。但對整數(shù)類型指定寬度,比如INT(11),沒有任何用,因為指定的類型標識范圍已經確定。

          ● VARCHAR的長度只分配真正需要的空間。

          ● 盡量使用TIMESTAMP而非DATETIME,但TIMESTAMP只能表示1970 - 2038年,比DATETIME表示的范圍小得多,而且TIMESTAMP的值因時區(qū)不同而不同。

          ● 單表不要有太多字段,建議在20以內。

          ● 合理的加入冗余字段可以提高查詢速度。

          2.垂直拆分表(垂直切割)

          垂直拆分按照字段進行拆分,其實就是把組成一行的多個列分開放到不同的表中,這些表具有不同的結構,拆分后的表具有更少的列。例如用戶表中的一些字段可能經常訪問,可以把這些字段放進一張表里。另外一些不經常使用的信息就可以放進另外一張表里。

          插入的時候使用事務,也可以保證兩表的數(shù)據一致。缺點也很明顯,由于拆分出來的兩張表存在一對一的關系,需要使用冗余字段,而且需要join操作。但是我們可以在使用的時候可以分別取兩次,這樣的來說既可以避免join操作,又可以提高效率。

          2.1 拆分時機:

          單表字段過多, 并且不需要一次性查詢返回展示到一個頁面上。

          2.2 拆分方法:

          一個頁面需要展示的數(shù)據字段, 盡量放在一張表中. 如果拆分成多個表, 那么這多個表的關系是1:1:1:1......的關系。

          2.3 優(yōu)點 :

          拆分后查詢單表性能得到提升, 速度快。

          2.4 缺點:

          如果拆分后, 需要查詢跨多張表的數(shù)據就會用到join連接查詢, 查詢速度會比沒拆分前慢。

          3.水平拆分表(水平切割)

          水平拆分按照行進行拆分,常見的就是分庫分表。以用戶表為例,可以取用戶ID,然后對ID取10的余數(shù),將用戶均勻的分配進這 0-9這10個表中。查找的時候也按照這種規(guī)則,又快又方便。

          有些表業(yè)務關聯(lián)比較強,那么可以使用按時間劃分的。例如每天的數(shù)據量很大,需要每天新建一張表。這種業(yè)務類型就是需要高速插入,但是對于查詢的效率不太關心。表越大,插入數(shù)據所需要索引維護的時間也就越長。

          3.1 拆分時機:

          MySQL單表大于500萬條數(shù)據, 就需要考慮水平分表, 因為單表數(shù)據量越大查詢越慢, 查詢效率成指數(shù)級下降。

          3.2 拆分方法:

          根據業(yè)務拆分:

          根據時間范圍拆分, 例如: 訂單數(shù)據, 按照訂單創(chuàng)建時間, 一個月一張表。

          按照區(qū)間分為拆分, 例如: 按照表自增id, 1-300萬條一張表。

        MySQL庫表結構優(yōu)化

          按照業(yè)務分類拆分, 例如: 用戶表按照男女拆分。

          hash分表:

          通過一個原始目標的ID或者名稱通過一定的hash算法計算出數(shù)據存儲表的表名,然后訪問相應的表。普通hash算法和一致性hash算法均可。

          一般企業(yè)利用工具來做水平分表:

          服務端分庫分表: MyCat, corbar等。

          客戶端分庫分表: shardingJDBC, ShardingSphere等。

          3.3 優(yōu)點:

          提高了查詢效率, 主要是在大量數(shù)據情況, 提高了查詢的命中率。

          3.4 缺點:

          提高了復雜度. 在數(shù)據量不大的情況, 水平分表體現(xiàn)不出好處。

          4.表分區(qū)

          4.1 目的:

          表分區(qū)小編給大家簡明扼要的說就是大量數(shù)據操作, 會有磁盤IO跟不上的情況, 所以表分區(qū), 就是將保存在硬盤上的數(shù)據文件放到一塊或者多快硬盤上, 以提高數(shù)據庫的IO性能。

          分區(qū)適用于例如日志記錄,查詢少。一般用于后臺的數(shù)據報表分析。對于這些數(shù)據匯總需求,需要很多日志表去做數(shù)據聚合,我們能夠容忍1s到2s的延遲,只要數(shù)據準確能夠滿足需求就可以。

          MySQL主要支持4種模式的分區(qū):Range分區(qū)、List預定義列表分區(qū),Hash 分區(qū),Key鍵值分區(qū)。

          4.2 錄入使用key鍵值分區(qū)

          小編舉個栗子:

        CREATE TABLE `test2` (
        `id` int(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
        `name` varchar(100) DEFAULT NULL COMMENT '名稱',
        `state` int(1) DEFAULT NULL COMMENT '狀態(tài)',
        PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8
        PARTITION BY KEY (id)
        PARTITIONS 10;

         

        聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
        10年以上業(yè)內強師集結,手把手帶你蛻變精英
        請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
        免費領取
        今日已有369人領取成功
        劉同學 138****2860 剛剛成功領取
        王同學 131****2015 剛剛成功領取
        張同學 133****4652 剛剛成功領取
        李同學 135****8607 剛剛成功領取
        楊同學 132****5667 剛剛成功領取
        岳同學 134****6652 剛剛成功領取
        梁同學 157****2950 剛剛成功領取
        劉同學 189****1015 剛剛成功領取
        張同學 155****4678 剛剛成功領取
        鄒同學 139****2907 剛剛成功領取
        董同學 138****2867 剛剛成功領取
        周同學 136****3602 剛剛成功領取
        相關推薦HOT
        宁明县| 满洲里市| 韶山市| 信丰县| 望奎县| 邵阳市| 齐齐哈尔市| 杂多县| 儋州市| 轮台县| 合水县| 永济市| 孝感市| 巴中市| 家居| 新晃| 阜康市| 会宁县| 清河县| 盐山县| 华阴市| 澜沧| 福鼎市| 弋阳县| 涡阳县| 炉霍县| 峨山| 武邑县| 云安县| 获嘉县| 泰安市| 丘北县| 高阳县| 凤翔县| 乌审旗| 台安县| 张北县| 公安县| 赫章县| 金阳县| 敦化市|