Mysql 表分區

来源:http://www.cnblogs.com/mengmeng89012/archive/2016/05/23/5519734.html
-Advertisement-
Play Games

Mysql 表分區操作及相關操作 將ID設為自增長ID alter table pw_trade_record_temp change ID ID int(4) auto_increment; 分區欄位必需為主鍵,修改主鍵 ALTER TABLE `pw_trade_record` DROP PRI ...


Mysql 表分區操作及相關操作 

將ID設為自增長ID 
alter table pw_trade_record_temp change ID ID int(4) auto_increment; 

分區欄位必需為主鍵,修改主鍵 

ALTER TABLE `pw_trade_record` 
DROP PRIMARY KEY, 
ADD PRIMARY KEY (`ID`, `TRADE_TIME`); 

直接在建表時創建表分區 

創建range分區 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date, 

salary int 



partition by range(salary) 



partition p1 values less than (1000), 

partition p2 values less than (2000), 

partition p3 values less than maxvalue 

); 

以員工工資為依據做範圍分區。 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date not null, 

salary int 



partition by range(year(birthdate)) 



partition p1 values less than (1980), 

partition p2 values less than (1990), 

partition p3 values less than maxvalue 

); 

以year(birthdate)表達式(計算員工的出生日期)作為範圍分區依據。這裡最值得註意的是表達式必須有返回值下載地址   。 

創建list分區 

create table emp 

(empno  varchar(20) not null , 

empname varchar(20), 

deptno  int, 

birthdate date not null, 

salary int 



partition by list(deptno) 



partition p1 values in  (10), 

partition p2 values in  (20), 

partition p3 values  in  (30) 

); 

以部門作為分區依據,每個部門做一分區。 

創建hash分區 

HASH分區主要用來確保數據在預先確定數目的分區中平均分佈。在RANGE和LIST分區中,必須明確指定一個給定的列值或列值集合應該保存在哪 個分區中;而在HASH分區中,MySQL 自動完成這些工作,你所要做的只是基於將要被哈希的列值指定一個列值或表達式,以及指定被分區的表將要被分割成的分區數量下載地址 。 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date not null, 

salary int 



partition by hash(year(birthdate)) 

partitions 4; 

創建key分區 

按照KEY進行分區類似於按照HASH分區,除了HASH分區使用的用戶定義的表達式,而KEY分區的哈希函數是由MySQL 伺服器提供,伺服器使用其自己內部的哈希函數,這些函數是基於與PASSWORD()一樣的運演算法則。“CREATE TABLE ...PARTITION BY KEY”的語法規則類似於創建一個通過HASH分區的表的規則。它們唯一的區別在於使用的關鍵字是KEY而不是HASH,並且KEY分區只採用一個或多個 列名的一個列表下載地址 。 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date not null, 

salary int 



partition by key(birthdate) 

partitions 4; 


創建複合分區 


range - hash(範圍哈希)複合分區 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date not null, 

salary int 



partition by range(salary) 

subpartition by hash(year(birthdate)) 

subpartitions 3 



partition p1 values less than (2000), 

partition p2 values less than maxvalue 

); 

range- key複合分區 

create table emp 

(empno varchar(20) not null , 

empname varchar(20), 

deptno int, 

birthdate date not null, 

salary int 



partition by range(salary) 

subpartition by key(birthdate) 

subpartitions 3 



partition p1 values less than (2000), 

partition p2 values less than maxvalue 

); 

list - hash複合分區 

CREATE TABLE emp ( 

empno varchar(20) NOT NULL, 

empname varchar(20) , 

deptno int, 

birthdate date NOT NULL, 

salary int 



PARTITION BY list (deptno) 

subpartition by hash(year(birthdate)) 

subpartitions 3 



PARTITION p1 VALUES in  (10), 

PARTITION p2 VALUES in  (20) 





list - key 複合分區 

CREATE TABLE empk ( 

empno varchar(20) NOT NULL, 

empname varchar(20) , 

deptno int, 

birthdate date NOT NULL, 

salary int 



PARTITION BY list (deptno) 

subpartition by key(birthdate) 

subpartitions 3 



PARTITION p1 VALUES in  (10), 

PARTITION p2 VALUES in  (20) 




修改現有未分區的表,給表做分區 

ALTER TABLE `pw_trade_record` 
PARTITION BY RANGE(UNIX_TIMESTAMP(TRADE_TIME)) 

PARTITION p20160501 VALUES LESS THAN (UNIX_TIMESTAMP('2016-05-01')), 
PARTITION pmax VALUES LESS THAN MAXVALUE); 


增加分區 
alter table pw_trade_record add partition (partition p20160518 values in (UNIX_TIMESTAMP('2016-05-18'))); 

刪除分區(一次性可刪除多個分區) 
alter table pw_trade_record drop partition p20140101,p20160501,...; 

刪除表的所有分區 
Alter table emp removepartitioning;--不會丟失數據 

合併表分區 
示例:將表分區p20140101,p20160501合併到p20160501分區中 
alter table pw_trade_record reorganize partition p20140101,p20160501 into 
(partition p20160501 values less than (UNIX_TIMESTAMP('2016-05-18')), 
PARTITION pmax VALUES LESS THAN MAXVALUE 
); 

分解表分區 
示例:將表分區pmax分解成p20160518和pmax兩個分區 
alter table pw_trade_record reorganize partition pmax into 
(partition p20160518 values less than (UNIX_TIMESTAMP('2016-05-18')), 
PARTITION pmax VALUES LESS THAN MAXVALUE 
); 

查看分區表狀態 
select table_schema,table_name,partition_name,partition_ordinal_position,partition_method,partition_expression,partition_description,table_rows,avg_row_length,data_length from INFORMATION_SCHEMA.PARTITIONS where table_name='pw_trade_record'; 


重新定義hash分區表: 

Alter table emp partition by hash(salary)partitions 7;  ----不會丟失數據 

重新定義range分區表: 

Alter table emp partitionbyrange(salary) 



partition p1 values less than (2000), 

partition p2 values less than (4000) 

); ----不會丟失數據 


重建分區: 

這和先刪除保存在分區中的所有記錄,然後重新插入它們,具有同樣的效果。它可用於整理分區碎片。 

ALTER TABLE emp rebuild partitionp1,p2; 


優化分區: 

如果從分區中刪除了大量的行,或者對一個帶有可變長度的行(也就是說,有VARCHAR,BLOB,或TEXT類型的列)作了許多修改,可以使用“ALTER TABLE ... OPTIMIZE PARTITION”來收回沒有使用的空間,並整理分區數據文件的碎片。 

ALTER TABLE emp optimize partition p1,p2; 

分析分區: 

讀取並保存分區的鍵分佈。 

ALTER TABLE emp analyze partition p1,p2; 

修補分區: 

修補被破壞的分區。 

ALTER TABLE emp repairpartition p1,p2; 

檢查分區: 

可以使用幾乎與對非分區表使用CHECK TABLE 相同的方式檢查分區。 

ALTER TABLE emp CHECK partition p1,p2; 

這個命令可以告訴你表emp的分區p1,p2中的數據或索引是否已經被破壞。如果發生了這種情況,使用“ALTER TABLE ... REPAIR PARTITION”來修補該分區。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:安裝sql server 2005過程中出現 如下問題:“選擇的功能中沒有任何功能可以安裝或升級”: 解決方案:Microsoft SQL Server 2005→配置工具→SQL配置管理器→SQL Server 2005服務→右邊的兩個服務啟動SQL Server FullTest Searc ...
  • 資料庫的恢復模型是否影響故障恢復,在簡單恢復模式里,你是否會丟失事務?在今天的文章里我想談下這點,詳細討論下。 恢復模式(Recovery Models) 對於這個問題的最簡單的答案是不會:恢復模型不會影響故障恢復,只用簡單恢復模式你不會丟失事務。那資料庫恢復模型的目的是什麼? 你用恢復模型你只告訴 ...
  • 1.函數依賴的定義 (a)平凡的函數依賴與非平凡的函數依賴 (b)函數依賴是語義範疇的概念 (c)函數依賴關係的存在與時間無關 (d)函數依賴可以保證關係分解的無損連接性 2.函數依賴的基本性質 SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE) (a)投影性:一組屬性函數決定它的子 ...
  • Sqlserver2008誤操作數據(delete或者update)後恢複數據(轉) 實際工作中,有時會直接在資料庫中操作數據,比如對數據進行delete或者update操作,當進行這些操作的時候,如果沒有加上 where條件或者where條件不合理,那麼導致的結果可想而知,如果操作的又是線上資料庫 ...
  • 資料庫管理系統(DBMS)由一個互相關聯的數據的集合和一組用以訪問這些數據的程式組成。這個數據集合通常稱作資料庫,其中包含了關於某個企業的信息。 DBMS的主要目標是要提供一種可以方便、高效地存取資料庫信息的途徑。 1.1 數據視圖 1.1.1 數據抽象 一個可用的系統必須能高效地檢索數據。這種高效 ...
  • 源表結構: pcgid string mobilegid string value double 測試數據如下: p1 m1 0.6p1 m2 0.9p2 m1 1.0 需要的結果是: p1 {"m2":"0.9","m1":"0.6"} 2 p2 {"m1":"1.0"} 1 就是對源表進行gro ...
  • 環境: mysql:mysql-5.1.65 centos:centos 6.5 編譯命令: gcc -o chinesetopinyin chinesetopinyin.c -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql 源代碼: 資料庫漢字 ...
  • mysql修改表欄位類型語法 alter table 表名 modify column 欄位名 類型; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...