电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解MySQL分區表

瀏覽:138日期:2023-10-13 11:57:25

前言:

分區是一種表的設計模式,通俗地講表分區是將一大表,根據條件分割成若干個小表。但是對于應用程序來講,分區的表和沒有分區的表是一樣的。換句話來講,分區對于應用是透明的,只是數據庫對于數據的重新整理。本篇文章給大家帶來的內容是關于MySQL中分區表的介紹及使用場景,有需要的朋友可以參考一下,希望對你有所幫助。

1.分區的目的及分區類型

MySQL在創建表的時候可以通過使用PARTITION BY子句定義每個分區存放的數據。在執行查詢的時候,優化器根據分區定義過濾那些沒有我們需要的數據的分區,這樣查詢就可以無需掃描所有分區,只需要查找包含需要數據的分區即可。

分區的另一個目的是將數據按照一個較粗的粒度分別存放在不同的表中。這樣做可以將相關的數據存放在一起,另外,當我們想要一次批量刪除整個分區的數據也會變得很方便。

下面簡單介紹下四種常見的分區類型:

RANGE分區:最為常用,基于屬于一個給定連續區間的列值,把多行分配給分區。最常見的是基于時間字段。 LIST分區:LIST分區和RANGE分區類似,區別在于LIST是枚舉值列表的集合,RANGE是連續的區間值的集合。 HASH分區:基于用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL中有效的、產生非負整數值的任何表達式。 KEY分區:類似于按HASH分區,區別在于KEY分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數。必須有一列或多列包含整數值。

上述四種分區類型中,RANGE分區 即范圍分區是最常用的。RANGE分區的特點是多個分區的范圍要連續,但是不能重疊,默認情況下使用VALUES LESS THAN屬性,即每個分區不包括指定的那個值。

2.分區操作示例

本節內容以RANGE分區為例,介紹下分區表相關的操作。

# 創建分區表mysql> CREATE TABLE `tr` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 -> PARTITION BY RANGE( YEAR(purchased) ) ( -> PARTITION p0 VALUES LESS THAN (1990), -> PARTITION p1 VALUES LESS THAN (1995), -> PARTITION p2 VALUES LESS THAN (2000), -> PARTITION p3 VALUES LESS THAN (2005), -> PARTITION p4 VALUES LESS THAN (2010), -> PARTITION p5 VALUES LESS THAN (2015) -> );Query OK, 0 rows affected (0.28 sec)# 插入數據mysql> INSERT INTO `tr` VALUES -> (1, ’desk organiser’, ’2003-10-15’), -> (2, ’alarm clock’, ’1997-11-05’), -> (3, ’chair’, ’2009-03-10’), -> (4, ’bookcase’, ’1989-01-10’), -> (5, ’exercise bike’, ’2014-05-09’), -> (6, ’sofa’, ’1987-06-05’), -> (7, ’espresso maker’, ’2011-11-22’), -> (8, ’aquarium’, ’1992-08-04’), -> (9, ’study desk’, ’2006-09-16’), -> (10, ’lava lamp’, ’1998-12-25’);Query OK, 10 rows affected (0.03 sec)Records: 10 Duplicates: 0 Warnings: 0

創建后可以看到,每個分區都會對應1個ibd文件。上面創建語句還是很好理解的,在此分區表中,通過YEAR函數取出DATE日期中的年份并轉化為整型,年份小于1990的存儲在分區p0中,小于1995的存儲在分區p1中,以此類推。請注意,每個分區的定義順序是從最低到最高。為了防止插入的數據因找不到相應分區而報錯,我們應該及時創建新的分區。下面繼續展示關于分區維護的其他操作。

# 查看某個分區的數據mysql> SELECT * FROM tr PARTITION (p2);+------+-------------+------------+| id | name | purchased |+------+-------------+------------+| 2 | alarm clock | 1997-11-05 || 10 | lava lamp | 1998-12-25 |+------+-------------+------------+2 rows in set (0.00 sec)# 增加分區mysql> alter table tr add partition( -> PARTITION p6 VALUES LESS THAN (2020) -> );Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0# 拆分分區mysql> alter table tr reorganize partition p5 into( -> partition s0 values less than(2012), -> partition s1 values less than(2015) -> );Query OK, 0 rows affected (0.26 sec)Records: 0 Duplicates: 0 Warnings: 0# 合并分區mysql> alter table tr reorganize partition s0,s1 into ( -> partition p5 values less than (2015) -> );Query OK, 0 rows affected (0.12 sec)Records: 0 Duplicates: 0 Warnings: 0# 清空某分區的數據mysql> alter table tr truncate partition p0;Query OK, 0 rows affected (0.11 sec)# 刪除分區mysql> alter table tr drop partition p1;Query OK, 0 rows affected (0.06 sec)Records: 0 Duplicates: 0 Warnings: 0# 交換分區# 先創建與分區表同樣結構的交換表mysql> CREATE TABLE `tr_archive` ( -> `id` INT, -> `name` VARCHAR(50), -> `purchased` DATE -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.28 sec)# 執行exchange交換分區mysql> alter table tr exchange PARTITION p2 with table tr_archive;Query OK, 0 rows affected (0.13 sec)

3.分區注意事項及適用場景

其實分區表的使用有很多限制和需要注意的事項,參考官方文檔,簡要總結幾點如下:

分區字段必須是整數類型或解析為整數的表達式。 分區字段建議設置為NOT NULL,若某行數據分區字段為null,在RANGE分區中,該行數據會劃分到最小的分區里。 MySQL分區中如果存在主鍵或唯一鍵,則分區列必須包含在其中。 Innodb分區表不支持外鍵。 更改sql_mode模式可能影響分區表的表現。 分區表不影響自增列。

從上面的介紹中可以看出,分區表適用于一些日志記錄表。這類表的特點是數據量大、并且有冷熱數據區分,可以按照時間維度來進行數據歸檔。這類表是比較適合使用分區表的,因為分區表可以對單獨的分區進行維護,對于數據歸檔更方便。

4.分區表為什么不常用

在我們項目開發中,分區表其實是很少用的,下面簡單說明下幾點原因:

分區字段的選擇有限制。 若查詢不走分區鍵,則可能會掃描所有分區,效率不會提升。 若數據分布不均,分區大小差別較大,可能性能提升也有限。 普通表改造成分區表比較繁瑣。 需要持續對分區進行維護,比如到了6月份前就要新增6月份的分區。 增加學習成本,存在未知風險。

總結:

本文較為詳細的介紹了MySQL分區相關內容,如果想使用分區表的話,建議提早做好規劃,在初始化的時候即創建分區表并制定維護計劃,使用得當還是比較方便的,特別是有歷史數據歸檔需求的表,使用分區表會使歸檔更方便。當然,關于分區表的內容還有很多,有興趣的同學可以找找官方文檔,官方文檔中有大量示例。

以上就是詳解MySQL分區表的詳細內容,更多關于MySQL分區表的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 学习虾-免费的学习资料下载平台| 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 宜兴市恺瑞德环保科技有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 事迹材料_个人事迹名人励志故事 学生作文网_中小学生作文大全与写作指导 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 魔方网-培训咨询服务平台| 济南保安公司加盟挂靠-亮剑国际安保服务集团总部-山东保安公司|济南保安培训学校 | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 众能联合-提供高空车_升降机_吊车_挖机等一站工程设备租赁 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 学习安徽网| 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 杭州可当科技有限公司—流量卡_随身WiFi_AI摄像头一站式解决方案 | 劳动法网-专业的劳动法和劳动争议仲裁服务网 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 |