好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > MySQL分區表的最佳實踐指南

MySQL分區表的最佳實踐指南

熱門標簽:南寧外呼系統招商 電話機器人是電腦呼號嗎 博樂電銷機器人 400電話到哪辦理優惠 鄭州網絡外呼系統價錢 機器人打電銷電話 上海市三維地圖標注 云南大數據外呼系統 怎么更改高德地圖標注

前言:

分區是一種表的設計模式,通俗地講表分區是將一大表,根據條件分割成若干個小表。但是對于應用程序來講,分區的表和沒有分區的表是一樣的。換句話來講,分區對于應用是透明的,只是數據庫對于數據的重新整理。本篇文章給大家帶來的內容是關于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分區相關內容,如果想使用分區表的話,建議提早做好規劃,在初始化的時候即創建分區表并制定維護計劃,使用得當還是比較方便的,特別是有歷史數據歸檔需求的表,使用分區表會使歸檔更方便。當然,關于分區表的內容還有很多,有興趣的同學可以找找官方文檔,官方文檔中有大量示例。

參考:

https://dev.mysql.com/doc/refman/5.7/en/partitioning.html

https://www.jb51.net/article/187690.htm

好了,到此這篇關于MySQL分區表的最佳實踐指南的文章就介紹到這了,更多相關MySQL分區表實踐內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • MySQL分庫分表與分區的入門指南
  • python 實現mysql自動增刪分區的方法
  • MySql分表、分庫、分片和分區知識深入詳解
  • MySQL學習記錄之KEY分區引發的血案
  • Mysql臨時表及分區表區別詳解
  • 詳解MySQL分區表
  • MySQL最佳實踐之分區表基本類型
  • MySql分表、分庫、分片和分區知識點介紹
  • MySQL分表和分區的具體實現方法
  • MySQL分區表的正確使用方法
  • MySQL高級特性——數據表分區的概念及機制詳解

標簽:澳門 寧夏 定西 恩施 杭州 秦皇島 益陽 白銀

巨人網絡通訊聲明:本文標題《MySQL分區表的最佳實踐指南》,本文關鍵詞  MySQL,分區表,的,最佳,實踐,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL分區表的最佳實踐指南》相關的同類信息!
  • 本頁收集關于MySQL分區表的最佳實踐指南的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 无码88aⅴ欧美熟妇人妻影院| 军人粗大| 国产成人精品午夜福麻豆报告| 无码AV大香线蕉伊人29| 别揉我的胸~啊~嗯视频| 一二三四在线播放免费视频中国| 午夜老司机在线观看| 又粗又黄又猛又爽大片app| 亚洲精品无码久久久久苍井空| 99久久夜色精品国产九九九九九九| 美女秘?部位隐私免费看| 欧美激情精品久久久久久变态| 国产精品久久久久久精品芦苇| 他在野外强要了我| 在禅房被和尚c得合不拢腿的| 综合久青草视频| 免费观看黄色的软件| 校花好奇穿上自动收紧拘束衣| 女被啪到深处出白浆gif动态图视频| 《四位少妇按摩记》高清| 久草视频在线观| 乐陵市| 美女露出尿口让男人桶爽最新章节| 茄子视频毛片免费观看| 男JI大巴进入女人的视频| 浴室吃奶2韩国在线观看| 皮靴少妇X?X?XHD| 91高清国产视频| 九色国产PORNY一区二区| 一人上面3人下| 嫩草AV无码精品一区三区| 镜子里看我怎么进入你阅读视频 | 精品偷国情拍在线视频| 日本动漫瑟瑟?免费网站| 欧美一级特黄高清视频| 欧美办公室狂躁大交XXOO| 欧美a级片视频| 女人被狂躁视频免费网站| 紫黑硕大猛喷浓精| 大象焦伊人在钱8| 美女又黄又免费视频|