日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql大数据中表分区的应用

發布時間:2024/1/17 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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大数据中表分区的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。