MySQL分區(qū)表分區(qū)策略詳解
分區(qū)表介紹
MySQL 數(shù)據(jù)庫(kù)中的數(shù)據(jù)是以文件的形勢(shì)存在磁盤上的,默認(rèn)放在 /var/lib/mysql/
目錄下面,我們可以通過(guò) show variables like '%datadir%';
命令來(lái)查看:
我們進(jìn)入到這個(gè)目錄下,就可以看到我們定義的所有數(shù)據(jù)庫(kù)了,一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)文件夾,一個(gè)庫(kù)中,有其對(duì)應(yīng)的表的信息,如下:
在 MySQL 中,如果存儲(chǔ)引擎是 MyISAM,那么在 data 目錄下會(huì)看到 3 類文件:.frm
、.myi
、.myd
,如下:
*.frm
:這個(gè)是表定義,是描述表結(jié)構(gòu)的文件。*.myd
:這個(gè)是數(shù)據(jù)信息文件,是表的數(shù)據(jù)文件。*.myi
:這個(gè)是索引信息文件。
如果存儲(chǔ)引擎是 InnoDB
, 那么在 data 目錄下會(huì)看到兩類文件:.frm
、.ibd
,如下:
*.frm
:表結(jié)構(gòu)文件。*.ibd
:表數(shù)據(jù)和索引的文件。
無(wú)論是哪種存儲(chǔ)引擎,只要一張表的數(shù)據(jù)量過(guò)大,就會(huì)導(dǎo)致 *.myd
、*.myi
以及 *.ibd
文件過(guò)大,數(shù)據(jù)的查找就會(huì)變的很慢。
為了解決這個(gè)問(wèn)題,我們可以利用 MySQL 的分區(qū)功能,在物理上將這一張表對(duì)應(yīng)的文件,分割成許多小塊,如此,當(dāng)我們查找一條數(shù)據(jù)時(shí),就不用在某一個(gè)文件中進(jìn)行整個(gè)遍歷了,我們只需要知道這條數(shù)據(jù)位于哪一個(gè)數(shù)據(jù)塊,然后在那一個(gè)數(shù)據(jù)塊上查找就行了;
另一方面,如果一張表的數(shù)據(jù)量太大,可能一個(gè)磁盤放不下,這個(gè)時(shí)候,通過(guò)表分區(qū)我們就可以把數(shù)據(jù)分配到不同的磁盤里面去。
通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表。
如:某用戶表的記錄超過(guò)了600萬(wàn)條,那么就可以根據(jù)入庫(kù)日期將表分區(qū),也可以根據(jù)所在地將表分區(qū)。當(dāng)然也可根據(jù)其他的條件分區(qū)。
MySQL 從 5.1 開(kāi)始添加了對(duì)分區(qū)的支持,分區(qū)的過(guò)程是將一個(gè)表或索引分解為多個(gè)更小、更可管理的部分。
對(duì)于開(kāi)發(fā)者而言,分區(qū)后的表使用方式和不分區(qū)基本上還是一模一樣,只不過(guò)在物理存儲(chǔ)上,原本該表只有一個(gè)數(shù)據(jù)文件,現(xiàn)在變成了多個(gè),每個(gè)分區(qū)都是獨(dú)立的對(duì)象,可以獨(dú)自處理,也可以作為一個(gè)更大對(duì)象的一部分進(jìn)行處理。
需要注意的是,分區(qū)功能并不是在存儲(chǔ)引擎層完成的,常見(jiàn)的存儲(chǔ)引擎如 InnoDB
、MyISAM
、NDB
等都支持分區(qū)。
但并不是所有的存儲(chǔ)引擎都支持,如 CSV
、FEDORATED
、MERGE
等就不支持分區(qū),因此在使用此分區(qū)功能前,應(yīng)該對(duì)選擇的存儲(chǔ)引擎對(duì)分區(qū)的支持有所了解。
表分區(qū)的優(yōu)缺點(diǎn)和限制
MySQL分區(qū)有優(yōu)點(diǎn)也有一些缺點(diǎn),如下:
優(yōu)點(diǎn):
- 查詢性能提升:分區(qū)可以將大表劃分為更小的部分,查詢時(shí)只需掃描特定的分區(qū),而不是整個(gè)表,從而提高查詢性能。特別是在處理大量數(shù)據(jù)或高并發(fā)負(fù)載時(shí),分區(qū)可以顯著減少查詢的響應(yīng)時(shí)間。
- 管理和維護(hù)的簡(jiǎn)化:使用分區(qū)可以更輕松地管理和維護(hù)數(shù)據(jù)??梢葬槍?duì)特定的分區(qū)執(zhí)行維護(hù)操作,如備份、恢復(fù)、優(yōu)化和數(shù)據(jù)清理,而不必處理整個(gè)表。這簡(jiǎn)化了維護(hù)任務(wù)并減少了操作的復(fù)雜性。
- 數(shù)據(jù)管理靈活性:通過(guò)分區(qū),可以根據(jù)業(yè)務(wù)需求輕松地添加或刪除分區(qū),而無(wú)需影響整個(gè)表。這使得數(shù)據(jù)的增長(zhǎng)和變化更具彈性,可以根據(jù)需求進(jìn)行動(dòng)態(tài)調(diào)整。
- 改善數(shù)據(jù)安全性和可用性:可以將不同分區(qū)的數(shù)據(jù)分布在不同的存儲(chǔ)設(shè)備上,從而提高數(shù)據(jù)的安全性和可用性。例如,可以將熱數(shù)據(jù)放在高速存儲(chǔ)設(shè)備上,而將冷數(shù)據(jù)放在廉價(jià)存儲(chǔ)設(shè)備上,以實(shí)現(xiàn)更高的性能和成本效益。
缺點(diǎn):
- 復(fù)雜性增加:分區(qū)引入了額外的復(fù)雜性,包括分區(qū)策略的選擇、表結(jié)構(gòu)的設(shè)計(jì)和維護(hù)、查詢邏輯的調(diào)整等。正確地設(shè)置和管理分區(qū)需要一定的經(jīng)驗(yàn)和專業(yè)知識(shí)。
- 索引效率下降:對(duì)于某些查詢,特別是涉及跨分區(qū)的查詢,可能會(huì)導(dǎo)致索引效率下降。由于查詢需要在多個(gè)分區(qū)之間進(jìn)行掃描,可能無(wú)法充分利用索引優(yōu)勢(shì),從而影響查詢性能。
- 存儲(chǔ)空間需求增加:使用分區(qū)會(huì)導(dǎo)致一定程度的存儲(chǔ)空間浪費(fèi)。每個(gè)分區(qū)都需要占用一定的存儲(chǔ)空間,包括分區(qū)元數(shù)據(jù)和一些額外的開(kāi)銷。因此,對(duì)于分區(qū)鍵的選擇和分區(qū)粒度的設(shè)置需要權(quán)衡存儲(chǔ)空間和性能之間的關(guān)系。
- 功能限制:在某些情況下,分區(qū)可能會(huì)限制某些MySQL的功能和特性的使用。例如,某些類型的索引可能無(wú)法在分區(qū)表上使用,或者某些DDL操作可能需要更復(fù)雜的處理。
在考慮使用分區(qū)時(shí),需要綜合考慮業(yè)務(wù)需求、查詢模式、數(shù)據(jù)規(guī)模和硬件資源等因素,并權(quán)衡分區(qū)帶來(lái)的優(yōu)勢(shì)和缺點(diǎn)。對(duì)于特定的應(yīng)用和數(shù)據(jù)場(chǎng)景,分區(qū)可能是一個(gè)有效的解決方案,但并不適用于所有情況。
同時(shí)分區(qū)表也存在一些限制,如下:
限制:
- 在mysql5.6.7之前的版本,一個(gè)表最多有1024個(gè)分區(qū);從5.6.7開(kāi)始,一個(gè)表最多可以有8192個(gè)分區(qū)。
- 分區(qū)表無(wú)法使用外鍵約束。
- NULL值會(huì)使分區(qū)過(guò)濾無(wú)效。
- 所有分區(qū)必須使用相同的存儲(chǔ)引擎。
分區(qū)適用場(chǎng)景
分區(qū)表在以下情況下可以發(fā)揮其優(yōu)勢(shì),適用于以下幾種使用場(chǎng)景:
- 大型表處理:當(dāng)面對(duì)非常大的表時(shí),分區(qū)表可以提高查詢性能。通過(guò)將表分割為更小的分區(qū),查詢操作只需要處理特定的分區(qū),從而減少掃描的數(shù)據(jù)量,提高查詢效率。這在處理日志數(shù)據(jù)、歷史數(shù)據(jù)或其他需要大量存儲(chǔ)和高性能查詢的場(chǎng)景中非常有用。
- 時(shí)間范圍查詢:對(duì)于按時(shí)間排序的數(shù)據(jù),分區(qū)表可以按照時(shí)間范圍進(jìn)行分區(qū),每個(gè)分區(qū)包含特定時(shí)間段內(nèi)的數(shù)據(jù)。這使得按時(shí)間范圍進(jìn)行查詢變得更高效,例如在某個(gè)時(shí)間段內(nèi)檢索數(shù)據(jù)、生成報(bào)表或執(zhí)行時(shí)間段的聚合操作。
- 數(shù)據(jù)歸檔和數(shù)據(jù)保留:分區(qū)表可用于數(shù)據(jù)歸檔和數(shù)據(jù)保留的需求。舊數(shù)據(jù)可以歸檔到單獨(dú)的分區(qū)中,并將其存儲(chǔ)在低成本的存儲(chǔ)介質(zhì)上。同時(shí),可以保留較新數(shù)據(jù)在高性能的存儲(chǔ)介質(zhì)上,以便快速查詢和操作。
- 并行查詢和負(fù)載均衡:通過(guò)哈希分區(qū)或鍵分區(qū),可以將數(shù)據(jù)均勻地分布在多個(gè)分區(qū)中,從而實(shí)現(xiàn)并行查詢和負(fù)載均衡。查詢可以同時(shí)在多個(gè)分區(qū)上進(jìn)行,并在最終合并結(jié)果,提高查詢性能和系統(tǒng)吞吐量。
- 數(shù)據(jù)刪除和維護(hù):使用分區(qū)表,可以更輕松地刪除或清理不再需要的數(shù)據(jù)。通過(guò)刪除整個(gè)分區(qū),可以更快速地刪除大量數(shù)據(jù),而不會(huì)影響整個(gè)表的操作。此外,可以針對(duì)特定分區(qū)執(zhí)行維護(hù)任務(wù),如重新構(gòu)建索引、備份和優(yōu)化,以減少對(duì)整個(gè)表的影響。
分區(qū)表并非適用于所有情況。在選擇使用分區(qū)表時(shí),需要綜合考慮數(shù)據(jù)量、查詢模式、存儲(chǔ)資源和硬件能力等因素,并評(píng)估分區(qū)對(duì)性能和管理的影響。
分區(qū)方式
分區(qū)有2種方式,水平切分和垂直切分。
MySQL 數(shù)據(jù)庫(kù)支持的分區(qū)類型為水平分區(qū),它不支持垂直分區(qū)。
此外,MySQL數(shù)據(jù)庫(kù)的分區(qū)是局部分區(qū)索引,一個(gè)分區(qū)中既存放了數(shù)據(jù)又存放了索引。而全局分區(qū)是指,數(shù)據(jù)存放在各個(gè)分區(qū)中,但是所有數(shù)據(jù)的索引放在一個(gè)對(duì)象中。
目前,MySQL數(shù)據(jù)庫(kù)還不支持全局分區(qū)。
分區(qū)策略
RANGE分區(qū)
RANGE分區(qū)是MySQL中的一種分區(qū)策略,根據(jù)某一列的范圍值將數(shù)據(jù)分布到不同的分區(qū)。每個(gè)分區(qū)包含特定的范圍。下面是RANGE分區(qū)的定義方式、特點(diǎn)以及代碼示例。
定義方式:
- 指定分區(qū)鍵:選擇作為分區(qū)依據(jù)的列作為分區(qū)鍵,通常是日期、數(shù)值等具有范圍特性的列。
- 分區(qū)函數(shù):通過(guò)
PARTITION BY RANGE
指定使用RANGE分區(qū)策略。 - 定義分區(qū)范圍:使用
VALUES LESS THAN
子句定義每個(gè)分區(qū)的范圍。
RANGE分區(qū)的特點(diǎn):
- 范圍劃分:根據(jù)指定列的范圍進(jìn)行分區(qū),適用于需要按范圍進(jìn)行查詢和管理的情況。
- 靈活的范圍定義:可以定義任意數(shù)量的分區(qū),并且每個(gè)分區(qū)可以具有不同的范圍。
- 高效查詢:根據(jù)查詢條件的范圍,MySQL能夠快速定位到特定的分區(qū),提高查詢效率。
- 動(dòng)態(tài)管理:可以根據(jù)業(yè)務(wù)需求輕松添加或刪除分區(qū),適應(yīng)數(shù)據(jù)增長(zhǎng)或變更的需求。
以下是一個(gè)使用RANGE分區(qū)的代碼示例:
CREATE TABLE sales ( id INT, sales_date DATE, amount DECIMAL(10, 2) ) PARTITION BY RANGE (YEAR(sales_date)) ( PARTITION p1 VALUES LESS THAN (2020), PARTITION p2 VALUES LESS THAN (2021), PARTITION p3 VALUES LESS THAN (2022), PARTITION p4 VALUES LESS THAN MAXVALUE );
在上述示例中,我們創(chuàng)建了名為sales
的表,使用RANGE分區(qū)策略。根據(jù)sales_date
列的年份范圍將數(shù)據(jù)分布到不同的分區(qū)。
- PARTITION BY RANGE (YEAR(sales_date)):指定使用RANGE分區(qū),基于sales_date列的年份進(jìn)行分區(qū)。
- PARTITION p1 VALUES LESS THAN (2020):定義名為p1的分區(qū),包含年份小于2020的數(shù)據(jù)。
- PARTITION p2 VALUES LESS THAN (2021):定義名為p2的分區(qū),包含年份小于2021的數(shù)據(jù)。
- PARTITION p3 VALUES LESS THAN (2022):定義名為p3的分區(qū),包含年份小于2022的數(shù)據(jù)。
- PARTITION p4 VALUES LESS THAN MAXVALUE:定義名為p4的分區(qū),包含超出定義范圍的數(shù)據(jù)。
RANGE分區(qū)允許根據(jù)列值的范圍將數(shù)據(jù)分散到不同的分區(qū)中,適用于按范圍進(jìn)行查詢和管理的情況。它提供了更靈活的數(shù)據(jù)管理和查詢效率的提升。
LIST分區(qū)
- LIST分區(qū)是根據(jù)某一列的離散值將數(shù)據(jù)分布到不同的分區(qū)。每個(gè)分區(qū)包含特定的列值列表。
下面是LIST分區(qū)的定義方式、特點(diǎn)以及代碼示例。
定義方式:
- 指定分區(qū)鍵:選擇作為分區(qū)依據(jù)的列作為分區(qū)鍵,通常是具有離散值的列,如地區(qū)、類別等。
- 分區(qū)函數(shù):通過(guò)
PARTITION BY LIST
指定使用LIST分區(qū)策略。 - 定義分區(qū)列表:使用
VALUES IN
子句定義每個(gè)分區(qū)包含的列值列表。
LIST分區(qū)的特點(diǎn):
- 列值離散:根據(jù)指定列的具體取值進(jìn)行分區(qū),適用于具有離散值的列。
- 靈活的分區(qū)定義:可以定義任意數(shù)量的分區(qū),并且每個(gè)分區(qū)可以具有不同的列值列表。
- 高效查詢:根據(jù)查詢條件的列值直接定位到特定分區(qū),提高查詢效率。
- 動(dòng)態(tài)管理:可以根據(jù)業(yè)務(wù)需求輕松添加或刪除分區(qū),適應(yīng)數(shù)據(jù)增長(zhǎng)或變更的需求。
以下是一個(gè)使用LIST分區(qū)的代碼示例:
CREATE TABLE users ( id INT, username VARCHAR(50), region VARCHAR(50) ) PARTITION BY LIST (region) ( PARTITION p_east VALUES IN ('New York', 'Boston'), PARTITION p_west VALUES IN ('Los Angeles', 'San Francisco'), PARTITION p_other VALUES IN (DEFAULT) );
在上述示例中,我們創(chuàng)建了名為users
的表,使用LIST分區(qū)策略。根據(jù)region
列的具體取值將數(shù)據(jù)分布到不同的分區(qū)。
PARTITION BY LIST (region)
:指定使用LIST分區(qū),基于region
列的值進(jìn)行分區(qū)。PARTITION p_east VALUES IN ('New York', 'Boston')
:定義名為p_east
的分區(qū),包含值為’New York’和’Boston’的region
列的數(shù)據(jù)。PARTITION p_west VALUES IN ('Los Angeles', 'San Francisco')
:定義名為p_west
的分區(qū),包含值為’Los Angeles’和’San Francisco’的region
列的數(shù)據(jù)。PARTITION p_other VALUES IN (DEFAULT)
:定義名為p_other
的分區(qū),包含其他region
列值的數(shù)據(jù)。
HASH分區(qū)
- HASH分區(qū)是使用哈希算法將數(shù)據(jù)均勻地分布到多個(gè)分區(qū)中。
下面是HASH分區(qū)的定義方式、特點(diǎn)以及代碼示例。
定義方式:
- 指定分區(qū)鍵:選擇作為分區(qū)依據(jù)的列作為分區(qū)鍵。
- 分區(qū)函數(shù):通過(guò)
PARTITION BY HASH
指定使用HASH分區(qū)策略。 - 定義分區(qū)數(shù)量:使用
PARTITIONS
關(guān)鍵字指定分區(qū)的數(shù)量。
HASH分區(qū)的特點(diǎn):
- 數(shù)據(jù)均勻分布:HASH分區(qū)使用哈希算法將數(shù)據(jù)均勻地分布到不同的分區(qū)中,確保數(shù)據(jù)在各個(gè)分區(qū)之間平衡。
- 并行查詢性能:通過(guò)將數(shù)據(jù)分散到多個(gè)分區(qū),HASH分區(qū)可以提高并行查詢的性能,多個(gè)查詢可以同時(shí)在不同分區(qū)上執(zhí)行。
- 簡(jiǎn)化管理:HASH分區(qū)使得數(shù)據(jù)管理更加靈活,可以輕松地添加或刪除分區(qū),以適應(yīng)數(shù)據(jù)增長(zhǎng)或變更的需求。
以下是一個(gè)使用HASH分區(qū)的代碼示例:
CREATE TABLE sensor_data ( id INT, sensor_name VARCHAR(50), value INT ) PARTITION BY HASH (id) PARTITIONS 4;
在上述示例中,我們創(chuàng)建了名為sensor_data
的表,使用HASH分區(qū)策略。根據(jù)id
列的哈希值將數(shù)據(jù)分布到4個(gè)分區(qū)中。
PARTITION BY HASH (id)
:指定使用HASH分區(qū),基于id
列的哈希值進(jìn)行分區(qū)。PARTITIONS 4
:指定創(chuàng)建4個(gè)分區(qū)。
KEY分區(qū)
- KEY分區(qū)是根據(jù)某一列的哈希值將數(shù)據(jù)分布到不同的分區(qū)。不同于HASH分區(qū),KEY分區(qū)使用的是列值的哈希值而不是哈希函數(shù)。
下面是KEY分區(qū)的定義方式、特點(diǎn)以及代碼示例。
定義方式:
- 指定分區(qū)鍵:選擇作為分區(qū)依據(jù)的列作為分區(qū)鍵。
- 分區(qū)函數(shù):通過(guò)
PARTITION BY KEY
指定使用KEY分區(qū)策略。 - 定義分區(qū)數(shù)量:使用
PARTITIONS
關(guān)鍵字指定分區(qū)的數(shù)量。
KEY分區(qū)的特點(diǎn):
- 哈希分布:KEY分區(qū)使用列值的哈希值將數(shù)據(jù)分布到不同的分區(qū)中,與哈希函數(shù)不同,它使用的是列值的哈希值。
- 高度自定義:KEY分區(qū)允許根據(jù)業(yè)務(wù)需求自定義分區(qū)邏輯,可以靈活地選擇分區(qū)鍵和分區(qū)數(shù)量。
- 并行查詢性能:通過(guò)將數(shù)據(jù)分散到多個(gè)分區(qū),KEY分區(qū)可以提高并行查詢的性能,多個(gè)查詢可以同時(shí)在不同分區(qū)上執(zhí)行。
- 簡(jiǎn)化管理:KEY分區(qū)使得數(shù)據(jù)管理更加靈活,可以輕松地添加或刪除分區(qū),以適應(yīng)數(shù)據(jù)增長(zhǎng)或變更的需求。
以下是一個(gè)使用KEY分區(qū)的代碼示例:
CREATE TABLE orders ( order_id INT, customer_id INT, order_date DATE ) PARTITION BY KEY (customer_id) PARTITIONS 5;
在上述示例中,我們創(chuàng)建了名為orders
的表,使用KEY分區(qū)策略。根據(jù)customer_id
列的哈希值將數(shù)據(jù)分布到5個(gè)分區(qū)中。
PARTITION BY KEY (customer_id)
:指定使用KEY分區(qū),基于customer_id
列的哈希值進(jìn)行分區(qū)。PARTITIONS 5
:指定創(chuàng)建5個(gè)分區(qū)。
COLUMNS 分區(qū)
MySQL在5.5版本引入了COLUMNS分區(qū)類型,其中包括RANGE COLUMNS分區(qū)和LIST COLUMNS分區(qū)。以下是對(duì)這兩種COLUMNS分區(qū)的詳細(xì)說(shuō)明:
1.RANGE COLUMNS分區(qū): RANGE COLUMNS分區(qū)是根據(jù)列的范圍值將數(shù)據(jù)分布到不同的分區(qū)的分區(qū)策略。
它類似于RANGE分區(qū),但是根據(jù)多個(gè)列的范圍值進(jìn)行分區(qū),而不是只根據(jù)一個(gè)列。這使得范圍的定義更加靈活,可以基于多個(gè)列的組合來(lái)進(jìn)行分區(qū)。
下面是一個(gè)RANGE COLUMNS分區(qū)的代碼示例:
CREATE TABLE sales ( id INT, sales_date DATE, region VARCHAR(50), amount DECIMAL(10,2) ) PARTITION BY RANGE COLUMNS(region, sales_date) ( PARTITION p1 VALUES LESS THAN ('East', '2022-01-01'), PARTITION p2 VALUES LESS THAN ('West', '2022-01-01'), PARTITION p3 VALUES LESS THAN ('East', MAXVALUE), PARTITION p4 VALUES LESS THAN ('West', MAXVALUE) );
在上述示例中,我們創(chuàng)建了一個(gè)名為sales的表,并使用RANGE COLUMNS分區(qū)策略。根據(jù)region和sales_date兩列的范圍將數(shù)據(jù)分布到不同的分區(qū)。每個(gè)分區(qū)根據(jù)這兩列的范圍值進(jìn)行劃分。
2.LIST COLUMNS分區(qū): LIST COLUMNS分區(qū)是根據(jù)列的離散值將數(shù)據(jù)分布到不同的分區(qū)的分區(qū)策略。
它類似于LIST分區(qū),但是根據(jù)多個(gè)列的離散值進(jìn)行分區(qū),而不是只根據(jù)一個(gè)列。這使得離散值的定義更加靈活,可以基于多個(gè)列的組合來(lái)進(jìn)行分區(qū)。
下面是一個(gè)LIST COLUMNS分區(qū)的代碼示例:
CREATE TABLE users ( id INT, username VARCHAR(50), region VARCHAR(50), category VARCHAR(50) ) PARTITION BY LIST COLUMNS(region, category) ( PARTITION p_east VALUES IN (('New York', 'A'), ('Boston', 'B')), PARTITION p_west VALUES IN (('Los Angeles', 'C'), ('San Francisco', 'D')), PARTITION p_other VALUES IN (DEFAULT) );
在上述示例中,我們創(chuàng)建了一個(gè)名為users的表,并使用LIST COLUMNS分區(qū)策略。根據(jù)region和category兩列的離散值將數(shù)據(jù)分布到不同的分區(qū)。每個(gè)分區(qū)根據(jù)這兩列的離散值進(jìn)行劃分。
常見(jiàn)分區(qū)命令
是否支持分區(qū)
在 MySQL5.6.1 之前可以通過(guò)命令 show variables like '%have_partitioning%'
來(lái)查看 MySQL 是否支持分區(qū)。如果 have_partitioning
的值為 YES,則表示支持分區(qū)。
從 MySQL5.6.1 開(kāi)始,have_partitioning
參數(shù)已經(jīng)被去掉了,而是用 SHOW PLUGINS
來(lái)代替。若有 partition 行且 STATUS 列的值為 ACTIVE,則表示支持分區(qū),如下所示:
創(chuàng)建分區(qū)表
CREATE TABLE sales ( id INT, sales_date DATE, amount DECIMAL(10,2) ) PARTITION BY RANGE (YEAR(sales_date)) ( PARTITION p1 VALUES LESS THAN (2020), PARTITION p2 VALUES LESS THAN (2021), PARTITION p3 VALUES LESS THAN (2022), PARTITION p4 VALUES LESS THAN MAXVALUE );
向分區(qū)表添加新的分區(qū)
ALTER TABLE sales ADD PARTITION ( PARTITION p5 VALUES LESS THAN (2023) );
刪除指定的分區(qū)
ALTER TABLE sales DROP PARTITION p3;
重新組織分區(qū)
ALTER TABLE sales REORGANIZE PARTITION p1, p2, p5 INTO ( PARTITION p1 VALUES LESS THAN (2020), PARTITION p2 VALUES LESS THAN (2022), PARTITION p3 VALUES LESS THAN MAXVALUE );
合并相鄰的分區(qū):
ALTER TABLE sales COALESCE PARTITION p1, p2;
分析指定分區(qū)的統(tǒng)計(jì)信息:
ALTER TABLE sales ANALYZE PARTITION p1;
到此這篇關(guān)于MySQL分區(qū)表分區(qū)策略詳解的文章就介紹到這了,更多相關(guān)MySQL分區(qū)表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決Mysql報(bào)錯(cuò)Deadlock found when trying to
這篇文章主要介紹了如何解決Mysql報(bào)錯(cuò)Deadlock found when trying to get lock;try restarting transaction問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05MySQL 配置優(yōu)化(多個(gè)參數(shù))
安裝MySQL后,配置文件my.cnf在 /MySQL安裝目錄/share/mysql目錄中,該目錄中還包含多個(gè)配置文件可供參考,有my-large.cnf ,my-huge.cnf, my-medium.cnf,my-small.cnf,分別對(duì)應(yīng)大中小型數(shù)據(jù)庫(kù)應(yīng)用的配置。win環(huán)境下即存在于MySQL安裝目錄中的.ini文件2016-05-05DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)
本文主要介紹了DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02解決Mysql服務(wù)器啟動(dòng)時(shí)報(bào)錯(cuò)問(wèn)題的方法
這篇文章主要介紹了解決Mysql服務(wù)器啟動(dòng)時(shí)報(bào)錯(cuò)問(wèn)題的方法,需要的朋友可以參考下2015-11-11解決MySQL因不能創(chuàng)建 PID 導(dǎo)致無(wú)法啟動(dòng)的方法
這篇文章主要給大家介紹了關(guān)于解決MySQL因不能創(chuàng)建 PID 導(dǎo)致無(wú)法啟動(dòng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06Mysql?索引?BTree?與?B+Tree?的區(qū)別(面試)
這篇文章主要介紹了Mysql索引BTree與B+Tree的區(qū)別,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09