Mysql大数据中表分区的应用
一、支持Mysql表分區需要MYSQL版本為5.1以上,含5.1~
二、表分區的作用:增加MYSQL的執行效率,可以在以下幾點分析表分區是如何增加MYSQL的執行效率的。
1、與單個磁盤或文件系統分區相比,可以存儲更多的數據。
2、對于那些已經失去保存意義的數據,通常可以通過刪除與那些數據有關的分區,很容易地刪除那些數據。
3、一些查詢可以得到極大的優化,這主要是借助于滿足一個給定WHERE語句的數據可以只保存在一個或多個分區內,這樣在查找時就不用查找其他剩余的分區。
4、涉及到例如SUM()和COUNT()這樣聚合函數的查詢,可以很容易地進行并行處理。這種查詢的一個簡單例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通過“并行”,這意味著該查詢可以在每個分區上同時進行,最終結果只需通過總計所有分區得到的結果。
5、通過跨多個磁盤來分散數據查詢,來獲得更大的查詢吞吐量。
三、通俗的講表分區是將一個大表,根據條件分割成若干個小表
四、表分區有哪些類型:
RANGE分區:基于屬于一個給定連續區間的列值,把多行分配給分區。
LIST分區:類似于按RANGE分區,區別在于LIST分區是基于列值匹配一個離散值集合中的某個值來進行選擇。
HASH分區:基于用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包含MySQL 中有效的、產生非負整數值的任何表達式。
KEY分區:類似于按HASH分區,區別在于KEY分區只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。
五、細分類型
RANGE分區
<1>創建含分區表
CREATE TABLE part_tab( c1 int default NULL, c2 varchar(30) default NULL, c3 date default NULL) engine=myisam PARTITION BY RANGE (year(c3)) (PARTITION p0 VALUES LESS THAN (1995), PARTITION p1 VALUES LESS THAN (1996) , PARTITION p2 VALUES LESS THAN (1997) , PARTITION p3 VALUES LESS THAN (1998) , PARTITION p4 VALUES LESS THAN (1999) , PARTITION p5 VALUES LESS THAN (2000) , PARTITION p6 VALUES LESS THAN (2001) , PARTITION p7 VALUES LESS THAN (2002) , PARTITION p8 VALUES LESS THAN (2003) , PARTITION p9 VALUES LESS THAN (2004) , PARTITION p10 VALUES LESS THAN (2010), PARTITION p11 VALUES LESS THAN MAXVALUE);<1>創建不含分區表
CREATE TABLE no_part_tab( c1 int default NULL, c2 varchar(30) default NULL, c3 date default NULL) engine=myisam<3>創建存儲過程,在表中插入800,0000條數據以做測試
CREATE PROCEDURE load_part_tab() begin declare v int default 0; while v < 8000000 do insert into part_tab values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652)); set v = v + 1; end while; end<4>再寫入未分區表中
insert into no_part_tab select * from part_tab;<5>好了,所有表數據準備完畢,下面我們來做一下測試
執行命令: select count(*) from no_part_tab where c3 >date('1995-01-01') and c3 < date('1995-12-31');執行結果:[SQL] select count(*) from no_part_tab where c3 >date('1995-01-01') and c3 <date('1995-12-31'); 受影響的行: 0 時間: 2.594ms 執行命令: select count(*) from part_tab where c3 >date('1995-01-01') and c3 < date('1995-12-31'); 執行結果:[SQL] select count(*) from part_tab where c3 > date('1995-01-01') and c3 <date('1995-12-31'); 受影響的行: 0 時間: 0.297ms很清楚的看到了,讀取同樣的數據,分區與未分區的兩個表相差的不是同一個級別的數據~,接下來就可以修改自己大數據的表了
ALTER TABLE sale_data REORGANIZE PARTITION p2010Q1 INTO ( PARTITION s2009 VALUES LESS THAN (201001), PARTITION s2010 VALUES LESS THAN (201004) );總結
以上是生活随笔為你收集整理的Mysql大数据中表分区的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Apache 服务器不支持FLV视频
- 下一篇: Mysql5.7 ZIP 压缩包非安装版