最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql四種分區(qū)方式以及組合分區(qū)落地實(shí)現(xiàn)詳解

 更新時(shí)間:2022年04月13日 11:22:42   作者:廣海_小瘋瘋丶  
對(duì)用戶來(lái)說(shuō),分區(qū)表是一個(gè)獨(dú)立的邏輯表,但是底層由多個(gè)物理子表組成,下面這篇文章主要給大家介紹了關(guān)于Mysql四種分區(qū)方式以及組合分區(qū)落地實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

看這篇文章前需要先了解一下以下幾個(gè)問(wèn)題~

一、問(wèn)題

1.分區(qū)是什么

分區(qū):就是把一張表數(shù)據(jù)分塊存儲(chǔ)

目的:提升索引的查詢效率

2.Mysql為什么要使用分區(qū)

先從數(shù)據(jù)分析

然后進(jìn)行索引優(yōu)化

然后引入分區(qū)

3.Mysql中分區(qū)原理

客戶端---------> Id 和分區(qū)鍵進(jìn)行比較------------->找到指定分區(qū)---------->和數(shù)據(jù)庫(kù)查詢一致

4.Mysql中分區(qū)局限

必須使用分區(qū)字段才行,不然分區(qū)查詢就會(huì)失敗。走所有分區(qū)。

目前Range是范圍分區(qū),但是有時(shí)候我們會(huì)發(fā)現(xiàn)。分區(qū)大小永遠(yuǎn)是靜態(tài)的。

所以會(huì)存在一個(gè)分區(qū)表大小不均。如何讓分區(qū)表大小均衡呢?

二、分區(qū)落地實(shí)現(xiàn)

1.Range分區(qū)

條件

  • Product-Partiton表

步驟

1、先創(chuàng)建Product-Partiton-Range

CREATE TABLE `product-Partiton-Range` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (Id) PARTITIONS 3 (
PARTITION part0 VALUES LESS THAN (12980), 
PARTITION part1 VALUES LESS THAN (25960), 
PARTITION part2 VALUES LESS THAN MAXVALUE);

2、然后查詢分區(qū)表

select * from product-Partiton-Range where Id = 25000

2.Hash分區(qū)

步驟

1、先創(chuàng)建Product-Partiton-Hash

CREATE TABLE `product-Partiton-Hash` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY HASH (Id) PARTITIONS 3;

Hash分區(qū)只能進(jìn)行數(shù)字字段進(jìn)行分區(qū),無(wú)法進(jìn)行字符字段進(jìn)行分區(qū)。如果需要對(duì)字段值進(jìn)行分區(qū)。

必須包含在主鍵字段內(nèi)。

3.Key分區(qū)

步驟

1、先創(chuàng)建Product-Partiton-Key

CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;

#建立復(fù)合主鍵
CREATE TABLE `product-Partiton-Key` (
	`Id` BIGINT(8) NOT NULL,
	`ProductName` CHAR(245) NOT NULL DEFAULT '1',
	`ProductId` CHAR(255) NOT NULL DEFAULT '1',
	`ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
	`ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
	PRIMARY KEY (`Id`),
	INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY KEY (ProductName) PARTITIONS 3;

以上分區(qū)都是一個(gè)特點(diǎn):所有的分區(qū)必須連續(xù)和連續(xù)大小進(jìn)行分區(qū)。

我們?cè)賮?lái)看一個(gè)場(chǎng)景:如何對(duì)商品訂單分區(qū)。

4.Mysql中如何落地List分區(qū)

步驟

1、先創(chuàng)建Product-Partiton-List

CREATE TABLE `product-Partiton-List` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    `ProductStatus` int NOT NULL DEFAULT 0,
    PRIMARY KEY (`Id`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY LIST(ProductId) (
    PARTITION a VALUES IN (1,5,6),
    PARTITION b VALUES IN (2,7,8)
);

商品主鍵和商品名稱進(jìn)行分區(qū)。

5.Mysql中如何落地組合分區(qū)

步驟

CREATE TABLE `product-Partiton-flex` (
    `Id` BIGINT(8) NOT NULL,
    `ProductName` CHAR(245) NOT NULL DEFAULT '1',
    `ProductId` CHAR(255) NOT NULL DEFAULT '1',
    `ProductDescription` CHAR(255) NOT NULL DEFAULT '1',
    `ProductUrl` CHAR(255) NOT NULL DEFAULT '1',
    PRIMARY KEY (`Id`,`ProductName`),
    INDEX `ProductId` (`ProductId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (Id) PARTITIONS 3
SUBPARTITION BY KEY(ProductName)
  SUBPARTITIONS 2 (
    PARTITION p0 VALUES LESS THAN (12980),
    PARTITION p1 VALUES LESS THAN (25960),
    PARTITION p2 VALUES LESS THAN MAXVALUE
);

三、Mysql如何管理分區(qū)

1.刪除分區(qū)

ALERT TABLE users DROP PARTITION p0; 
#刪除分區(qū) p0

2.重建分區(qū)

2.1RANGE 分區(qū)重建

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));  
#將原來(lái)的 p0,p1 分區(qū)合并起來(lái),放到新的 p0 分區(qū)中。

2.2 LIST 分區(qū)重建

ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));
#將原來(lái)的 p0,p1 分區(qū)合并起來(lái),放到新的 p0 分區(qū)中。

2.3 HASH/KEY 分區(qū)重建

ALTER TABLE users REORGANIZE PARTITION COALESCE PARTITION 2; 
#用 REORGANIZE 方式重建分區(qū)的數(shù)量變成2,在這里數(shù)量只能減少不能增加。想要增加可以用 ADD PARTITION 方法。

3. 新增分區(qū)

3.1 新增 RANGE 分區(qū)

#新增一個(gè)RANGE分區(qū)
ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19)
            DATA DIRECTORY = '/data8/data'
            INDEX DIRECTORY = '/data9/idx');

3.2 新增 HASH/KEY 分區(qū)

ALTER TABLE users ADD PARTITION PARTITIONS 8;   #將分區(qū)總數(shù)擴(kuò)展到8個(gè)。

3.3 給已有的表加上分區(qū)

alter table results partition by RANGE (month(ttime)) 
(
PARTITION p0 VALUES LESS THAN (1),
PARTITION p1 VALUES LESS THAN (2) , 
PARTITION p2 VALUES LESS THAN (3) ,
PARTITION p3 VALUES LESS THAN (4) , 
PARTITION p4 VALUES LESS THAN (5) ,
PARTITION p5 VALUES LESS THAN (6) , 
PARTITION p6 VALUES LESS THAN (7) ,
PARTITION p7 VALUES LESS THAN (8) , 
PARTITION p8 VALUES LESS THAN (9) ,
PARTITION p9 VALUES LESS THAN (10) , 
PARTITION p10 VALUES LESS THAN (11),
PARTITION p11 VALUES LESS THAN (12),
PARTITION P12 VALUES LESS THAN (13) 
);

4.默認(rèn)分區(qū)限制分區(qū)字段必須是主鍵(PRIMARY KEY)的一部分,去除此限制

[方法1] 使用ID:

mysql> ALTER TABLE np_pk
    ->     PARTITION BY HASH( TO_DAYS(added) )
    ->     PARTITIONS 4;
#ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function
mysql> ALTER TABLE np_pk
    ->     PARTITION BY HASH(id)
    ->     PARTITIONS 4;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0

[方法2] 將原有PK去掉生成新PK

mysql> alter table results drop PRIMARY KEY;
Query OK, 5374850 rows affected (7 min 4.05 sec)
Records: 5374850 Duplicates: 0 Warnings: 0

mysql> alter table results add PRIMARY KEY(id, ttime);
Query OK, 5374850 rows affected (7 min 4.05 sec)
Records: 5374850 Duplicates: 0 Warnings: 0

總結(jié)

到此這篇關(guān)于Mysql四種分區(qū)方式以及組合分區(qū)落地實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql組合分區(qū)落地內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mysql大數(shù)據(jù)量查詢優(yōu)化思路詳析

    Mysql大數(shù)據(jù)量查詢優(yōu)化思路詳析

    這篇文章主要介紹了Mysql大數(shù)據(jù)量查詢優(yōu)化思路,Mysql大表查詢優(yōu)化,理論上千萬(wàn)級(jí)別以下的數(shù)據(jù)量Mysql單表查詢性能處理都是可以的。下文我們就來(lái)看看具體得思路解析
    2022-01-01
  • mysql8.0.23 msi安裝超詳細(xì)教程

    mysql8.0.23 msi安裝超詳細(xì)教程

    這篇文章主要介紹了mysql8.0.23 msi安裝超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • MySQL 中查詢 VARCHAR 類型 JSON 數(shù)據(jù)的問(wèn)題記錄

    MySQL 中查詢 VARCHAR 類型 JSON 數(shù)據(jù)的問(wèn)題記錄

    在數(shù)據(jù)庫(kù)設(shè)計(jì)中,有時(shí)我們會(huì)將 JSON 數(shù)據(jù)存儲(chǔ)在 VARCHAR 或 TEXT 類型字段中,本文將詳細(xì)介紹如何在 MySQL 中有效查詢存儲(chǔ)為 VARCHAR 類型的 JSON 數(shù)據(jù),感興趣的朋友一起看看吧
    2025-04-04
  • Mac Mysql數(shù)據(jù)庫(kù)中文亂碼問(wèn)題解決

    Mac Mysql數(shù)據(jù)庫(kù)中文亂碼問(wèn)題解決

    這篇文章主要介紹了Mac Mysql數(shù)據(jù)庫(kù)中文亂碼問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MYSQL必知必會(huì)讀書筆記第八章之使用通配符進(jìn)行過(guò)濾

    MYSQL必知必會(huì)讀書筆記第八章之使用通配符進(jìn)行過(guò)濾

    這篇文章主要介紹了MYSQL必知必會(huì)讀書筆記第八章之使用通配符進(jìn)行過(guò)濾的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • MySQL深分頁(yè)問(wèn)題解決思路

    MySQL深分頁(yè)問(wèn)題解決思路

    這篇文章主要介紹了優(yōu)雅地解決mysql深分頁(yè)問(wèn)題,本文將會(huì)討論當(dāng)mysql表大數(shù)據(jù)量的情況,如何優(yōu)化深分頁(yè)問(wèn)題,并附上最近的優(yōu)化慢sql問(wèn)題的案例偽代碼,需要的朋友可以參考下
    2022-12-12
  • MySQL5創(chuàng)建存儲(chǔ)過(guò)程的示例

    MySQL5創(chuàng)建存儲(chǔ)過(guò)程的示例

    存儲(chǔ)過(guò)程可以一次執(zhí)行多個(gè)sql語(yǔ)句,所以php只連接數(shù)據(jù)庫(kù)一次就能查詢多個(gè)語(yǔ)句;不過(guò)要返回多個(gè)結(jié)果集就必須用mysqli擴(kuò)展來(lái)查詢,否則會(huì)提示錯(cuò)誤can't return a result set in the given context
    2008-09-09
  • Linux下自動(dòng)備份MySQL的方法

    Linux下自動(dòng)備份MySQL的方法

    這篇文章主要介紹了Linux下自動(dòng)備份MySQL的方法,需要的朋友可以參考下
    2015-01-01
  • MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析

    MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析

    innodb事務(wù)日志包括redo?log和undo?log,redo?log是重做日志,提供前滾操作,undo?log是回滾日志,提供回滾操作,下面這篇文章主要給大家介紹了關(guān)于MySQL事務(wù)日志(redo?log和undo?log)的詳細(xì)分析,需要的朋友可以參考下
    2022-04-04
  • MySql新手入門的基本操作匯總

    MySql新手入門的基本操作匯總

    MySQL是目前來(lái)說(shuō)最好的 RDBMS應(yīng)用軟件之一,這篇文章主要給大家介紹了關(guān)于MySql基本操作的相關(guān)資料,非常適合mysql新手入門,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論

扎兰屯市| 兴山县| 铜陵市| 于都县| 宜州市| 涿州市| 赣榆县| 郴州市| 渭源县| 巴彦县| 仲巴县| 保康县| 绥棱县| 临潭县| 东兴市| 耒阳市| 陈巴尔虎旗| 台南市| 东至县| 清水县| 洛扎县| 连云港市| 徐水县| 龙山县| 卢氏县| 四子王旗| 昭觉县| 山阴县| 株洲市| 辽阳县| 达日县| 犍为县| 平阴县| 浦北县| 和硕县| 临澧县| 汶川县| 军事| 田林县| 工布江达县| 江达县|