對底層表的封裝,意味著索引也是按照分區(qū)的子表定義的,而沒有全局索引。(所以即使有唯一性索引,在不同子表中可能會有重復(fù)數(shù)據(jù))

創(chuàng)新互聯(lián)建站成立于2013年,我們提供高端網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計公司、網(wǎng)站定制、網(wǎng)絡(luò)營銷推廣、小程序制作、微信公眾號開發(fā)、成都網(wǎng)站營銷服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項(xiàng)目落地,為成都PE包裝袋企業(yè)提供源源不斷的流量和訂單咨詢。
單表數(shù)據(jù)量超大時索引失效
將單表分區(qū)成數(shù)個區(qū)域,通過分區(qū)函數(shù),可以快速地定位到數(shù)據(jù)的區(qū)域。而且相比于索引,分區(qū)不需要額外的數(shù)據(jù)結(jié)構(gòu)記錄每個分區(qū)的數(shù)據(jù),代價更低。只需要一個簡單的表達(dá)式就可以指向正確的分區(qū)
可以只是用簡單的分區(qū)方式存放表,不要任何索引,只要將查詢定位到需要的大致數(shù)據(jù)位置,通過where條件,將需要的數(shù)據(jù)限制在少數(shù)分區(qū)中,則效率是很高的。WARNNING:查詢需要掃描的分區(qū)個數(shù)限制在一個很小的數(shù)量。
如果數(shù)據(jù)有明顯的“熱點(diǎn)”,可以將熱點(diǎn)數(shù)據(jù)單獨(dú)放在一個分區(qū),讓這個分區(qū)的數(shù)據(jù)能夠有機(jī)會都緩存在內(nèi)存中。
如果分區(qū)表達(dá)式的值可以是NULL:第一個分區(qū)會使一個特殊分區(qū)。以partition by range year(order_date)為例,所有在order_date列為NULL或者非法值的數(shù)據(jù)都會被放到第一個分區(qū)。那么所有的查詢在定位分區(qū)后都會增加掃描第一個分區(qū)。而且如果第一個分區(qū)很大的時候,查詢的成本會被這個“拖油瓶”分區(qū)無情的增加。
創(chuàng)建一個無用的第一分區(qū)可以解決這個問題,partition p_nulls values less than (0);
對于分區(qū)列和索引列不匹配的查詢,雖然查詢能夠使用索引,但是無法通過分區(qū)定位到目標(biāo)數(shù)據(jù)的分區(qū)(也就是數(shù)據(jù)分布相對更加分散),需要遍歷每個分區(qū)內(nèi)的索引,除非查詢中的條件同時也包含分區(qū)條件。所以期望分區(qū)條件范圍被熱門查詢索引所包含。
對于 范圍分區(qū) 技術(shù),需要適當(dāng)限制分區(qū)的數(shù)量,否則對于大量數(shù)據(jù)批量導(dǎo)入的場景,選擇分區(qū)的成本過高。對于大多數(shù)系統(tǒng),100個左右的分區(qū)是沒有問題的。
當(dāng)數(shù)據(jù)表中的數(shù)據(jù)量很大時,分區(qū)帶來的效率提升才會顯現(xiàn)出來。
只有檢索字段為分區(qū)字段時,分區(qū)帶來的效率提升才會比較明顯。因此, 分區(qū)字段的選擇很重要 ,并且 業(yè)務(wù)邏輯要盡可能地根據(jù)分區(qū)字段做相應(yīng)調(diào)整 (盡量使用分區(qū)字段作為查詢條件)。
1、分區(qū)表對業(yè)務(wù)透明,只需要維護(hù)一個表的數(shù)據(jù)結(jié)構(gòu)。
2、DML操作加鎖僅影響操作的分區(qū),不會影響未訪問分區(qū)。
3、通過分區(qū)交換快速將數(shù)據(jù)換入和換出分區(qū)表。
4、通過TRUNCATE操作快速清理特定分區(qū)數(shù)據(jù)。
5、通過強(qiáng)制分區(qū)僅訪問特定分區(qū)數(shù)據(jù),減少操作影響。
6、通過大數(shù)據(jù)量分區(qū)能有效降低索引層數(shù),提高查詢性能。
1、創(chuàng)建表時指定分區(qū)
物理文件:
2、插入數(shù)據(jù)
3、查詢 information_schema.partitions 表得到該表的分區(qū)信息
4、查詢計劃分析
5、添加分區(qū)
若報錯:
6、修改/覆蓋/合并分區(qū)
報錯
所以需要添加pmax 分區(qū),一同修改
7、刪除分區(qū)
8、查詢具體分區(qū)的下數(shù)據(jù)
MySQL分區(qū)的限制
我們的業(yè)務(wù)只存近一段時間的數(shù)據(jù),因此有大量表需要清理 歷史 數(shù)據(jù),目前使用的delete清理數(shù)據(jù),存在以下問題。為避免同時支持大量delete,我們的清理任務(wù)只在低峰期串行執(zhí)行,導(dǎo)致任務(wù)過多時需要排隊,甚至失敗的情況;數(shù)據(jù)清理使用delete語句,表數(shù)據(jù)量較大時,對數(shù)據(jù)庫造成很大壓力;即使我們刪除了舊數(shù)據(jù),已刪除的數(shù)據(jù)仍占據(jù)存儲空間,底層數(shù)據(jù)文件并沒有立刻變小,以至于形成數(shù)據(jù)空洞。
查看MySQL官方文檔時,發(fā)現(xiàn)了分區(qū)表,因此基于官方文檔總結(jié)一下。
MySQL邏輯上為一個表,物理上存儲在多個文件中,這是 MySQL 支持的功能(5.1 開始), 8.0 版本只 InnoDB 和 NDB 支持分區(qū)表。
優(yōu)點(diǎn):
缺點(diǎn):
根據(jù)分區(qū)表鍵值的范圍把數(shù)據(jù)存儲到表的不同分區(qū)中,適用于以時間或日期作為分區(qū)類型,方便數(shù)據(jù)清理。
小提示:
1.當(dāng)插入數(shù)據(jù)分區(qū)不存在時會報錯:Table has no partition for value xxx;
2.Range類型分區(qū)字段必須是數(shù)值,時間類型可用函數(shù)轉(zhuǎn)換為數(shù)值;
3.分區(qū)字段列值可以為null,所有為null的數(shù)據(jù)將存在最小的分區(qū)中;
按分區(qū)鍵取值的列表進(jìn)行分區(qū),每一行數(shù)據(jù)須找到對應(yīng)的分區(qū)列表,否則數(shù)據(jù)插入失敗
小提示:
根據(jù)指定分區(qū)表達(dá)式的整數(shù)值以及分區(qū)數(shù)進(jìn)行數(shù)據(jù)劃分(mod函數(shù))
小提示:
按鍵分區(qū)類似于按哈希分區(qū),只是哈希分區(qū)使用用戶定義的表達(dá)式,用于鍵分區(qū)的哈希函數(shù)由 MySQL 服務(wù)器提供。NDB 集群為此使用 MD5() ; 對于使用其他存儲引擎的表,服務(wù)器使用自己的內(nèi)部哈希函數(shù)。
小提示:
子分區(qū)(subpartitioning)也稱為復(fù)合分區(qū)(composite partitioning) ,是已分區(qū)表中每個分區(qū)的進(jìn)一步劃分
小提示:
小提示:
網(wǎng)頁名稱:mysql分區(qū)表怎么用,mysql表分區(qū)的好處
本文來源:http://chinadenli.net/article30/dsgsdpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站維護(hù)、用戶體驗(yàn)、python、外貿(mào)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)