MySQL LIST分區

来源:http://www.cnblogs.com/chenmh/archive/2016/11/04/5643174.html
-Advertisement-
Play Games

介紹 LIST分區和RANGE分區非常的相似,主要區別在於LIST是枚舉值列表的集合,RANGE是連續的區間值的集合。二者在語法方面非常的相似。同樣建議LIST分區列是非null列,否則插入null值如果枚舉列表裡面不存在null值會插入失敗,這點和其它的分區不一樣,RANGE分區會將其作為最小分區 ...


介紹

LIST分區和RANGE分區非常的相似,主要區別在於LIST是枚舉值列表的集合,RANGE是連續的區間值的集合。二者在語法方面非常的相似。同樣建議LIST分區列是非null列,否則插入null值如果枚舉列表裡面不存在null值會插入失敗,這點和其它的分區不一樣,RANGE分區會將其作為最小分區值存儲,HASH\KEY分為會將其轉換成0存儲,主要LIST分區只支持整形,非整形欄位需要通過函數轉換成整形;5.5版本之後可以不需要函數轉換使用LIST COLUMN分區支持非整形欄位,在COLUMN分區中有詳細的講解。

 

一、創建分區

List各個分區枚舉的值只需要不相同即可,沒有固定的順序。

CREATE TABLE tblist (
    id INT NOT NULL,
    store_id INT
)
PARTITION BY LIST(store_id) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8),
    PARTITION c VALUES IN (3,9,10),
    PARTITION d VALUES IN (4,11,12)
);
SELECT PARTITION_NAME,PARTITION_METHOD,PARTITION_EXPRESSION,PARTITION_DESCRIPTION,TABLE_ROWS,SUBPARTITION_NAME,SUBPARTITION_METHOD,SUBPARTITION_EXPRESSION 
FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA=SCHEMA() AND TABLE_NAME='tblist';

 1.插入數據

insert into tblist(id,store_id) values(1,1),(7,7); 

往a、b兩個分區中各插入一條記錄

2.插入不在列表中的值

 

當往分區中插入不在枚舉列表中的值是會插入失敗,插入null值如果null值不在枚舉列表中也同樣失敗

二、分區管理

1.增加分區

ALTER TABLE tblist ADD PARTITION (PARTITION e VALUES IN (20));

註意:不能增加包含現有任意值的分區。

2.合併分區

ALTER TABLE tblist REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

將分區a,b合併為分區m

註意:同RANGE分區一樣,只能合併相鄰的幾個分區,不能跨分區合併。例如不能合併a,c兩個分區,只能通過合併a,b,c

3.拆分分區

ALTER TABLE tblist REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

ALTER TABLE tblist REORGANIZE PARTITION  n INTO 
    ( PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (3,9,10));

經過兩輪的拆分,枚舉列表(3,9,10)排到了(2,7,8)的前面去了;其實是這樣的,一開始合併abc成nm兩個分區由於n中的枚舉值小於m所以n在m的前面,後面再拆分n分區由於n分區在m分區的前面所以拆分出來的分區也是排在m分區的前面,由於a分區的值小於b分區的值所以a排在b的前面。

註意:1.在5.7.12版本中測試發現,合併和拆分分區重新定義的枚舉值可以不是原來的值,如果原來的枚舉值包含了數據而新合併或拆分的分區枚舉值又不不包含原來的枚舉值會造成數據丟失。雖然不知道為什麼mysql不會禁止該行為,但是人為的要求無論是合併還是拆分分區枚舉值保持不變,或者只能增加不能減少,這樣能保證數據不丟失。

2.合併和拆分後的分區由於是相鄰的分區進行合併和拆分會根據原本的分區的值新的分區也會在原本的分區的順序位置。

4.刪除分區

ALTER TABLE tblist DROP PARTITION e;

註意:刪除分區同時會將分區中的數據刪除,同時枚舉的list值也被刪除,後面無法往表中插入該值的數據。

三、其它分區

1.對時間欄位進行分區

CREATE TABLE listdate (
    id INT NOT NULL,
    hired DATETIME NOT NULL
)
PARTITION BY LIST( YEAR(hired) ) 
(
    PARTITION a VALUES IN (1990),
    PARTITION b VALUES IN (1991),
    PARTITION c VALUES IN (1992),
    PARTITION d VALUES IN (1993)
);

ALTER TABLE listdate ADD INDEX ix_hired(hired);

INSERT INTO listdate() VALUES(1,'1990-01-01 10:00:00'),(1,'1991-01-01 10:00:00'),(1,'1992-01-01 10:00:00');
EXPLAIN SELECT * FROM listdate WHERE hired='1990-01-01 10:00:00';

 LIST分區也支持對非整形的時間類型欄位的轉換分區。

四、移除表的分區

ALTER TABLE tablename
REMOVE PARTITIONING ;

註意:使用remove移除分區是僅僅移除分區的定義,並不會刪除數據和drop PARTITION不一樣,後者會連同數據一起刪除

 

 

參考: 

RANGE分區:http://www.cnblogs.com/chenmh/p/5627912.html

COLUMN分區:http://www.cnblogs.com/chenmh/p/5630834.html

HASH分區:http://www.cnblogs.com/chenmh/p/5644496.html

KEY分區:http://www.cnblogs.com/chenmh/p/5647210.html

子分區:http://www.cnblogs.com/chenmh/p/5649447.html

指定各分區路徑:http://www.cnblogs.com/chenmh/p/5644713.html

分區索引:http://www.cnblogs.com/chenmh/p/5761995.html

分區介紹總結:http://www.cnblogs.com/chenmh/p/5623474.html

總結

 重新定義LIST分區時只能重新定義相鄰的分區,不能跳過分區定義,重新定義的分區列表枚舉必須包含原分區的列表枚舉,如果丟失某個包含記錄的枚舉值那麼數據也將被刪除;重新定義分區不能改變分區的類型。

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》


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

-Advertisement-
Play Games
更多相關文章
  • GCD(Grand Central Dispatch)應該是我們開發中最常用到的多線程解決方案,是蘋果公司專門為多核的並行運算提出的解決方案,是基於C語言的,提供了很多非常強大的函數。 GCD的優勢 1.會自動利用更多的CPU內核(從iPhone4s開始是雙核,iPhone7系列是4核)。 2.會自 ...
  •   我們把一些耗時操作放在子線程,例如下載圖片,但是下載完畢我們不能在子線程更新UI,因為只有主線程才可以更新UI和處理用戶的觸摸事件,否則程式會崩潰。此時,我們就需要把子線程下載完畢的數據傳遞到主線程,讓主線程更新UI,這就是線程間的通信。 原理 代碼 日誌  &em ...
  • 目錄 1 易建聯脫鞋事件2 傳說中的網路水軍 2.1 網路水軍是什麼? 2.2 網路水軍發現技術3 基於同貼率的網路水軍發現4 基於情感分析的網路水軍發現5 總結 1 易建聯脫鞋事件 (圖片來自網路,侵刪) 2016年11月2日,剛剛從NBA回歸的易建聯沒想到搞了個大新聞!過去4年來,李寧公司作為C ...
  • 介紹 基於給定的分區個數,將數據分配到不同的分區,HASH分區只能針對整數進行HASH,對於非整形的欄位只能通過表達式將其轉換成整數。表達式可以是mysql中任意有效的函數或者表達式,對於非整形的HASH往表插入數據的過程中會多一步表達式的計算操作,所以不建議使用複雜的表達式這樣會影響性能。 MYS ...
  • My Sql 大部分都是用綠色版(解壓版) 然後註冊服務 簡單方便。 但是。配置文件頭痛的一逼。 首先配置mysql的環境變數。 mySQL 環境變數(我的電腦-右擊屬性-高級-環境變數) MYSQL_HOME(解壓路徑):E:\MYSQL\mysql-5.6.23-winx64 path:在最後面 ...
  • MySql select tablename.* from tablename limit firstIndex,pageSize; firstIndex >開始索引 pageSize >頁大小 Oracle Oracle select * from ( select a.*,ROWNUM rn f ...
  • sql server 2012深入解析與性能優化(第3版) 第五章 查詢處理和執行 1.sqlserver通過四個步驟處理一個查詢,分析,algebrizing,優化,執行。2.分析是分析語法錯誤生成分析樹,綁定部分有,名字解析,類型推倒,聚合綁定,組合綁定。查詢優化器,將查詢樹找到好的執行計劃,如 ...
  • 最近學習了一下SQL的分頁查詢,總結了以下幾種方法。 首先建立了一個表,隨意插入的一些測試數據,表結構和數據如下圖: 現在假設我們要做的是每頁5條數據,而現在我們要取第三頁的數據。(數據太少,就每頁5條了) 方法一: 結果: 此方法是先取出前10條的SID(前兩頁),排除前10條數據的SID,然後在 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...