更新時間:2021-01-26 17:45:17 來源:動力節點 瀏覽1477次
分區是將一個表的數據按照某種方式,邏輯上仍是一個表,也就是所謂的分區表。分區引入了分區鍵的概念,分區鍵用于根據某個區間值(或者范圍值)、特定值列表或者hash函數值執行數據的聚集,讓數據根據規則分布在不同的分區中,讓一個大對象變成一些小對象,從而實現對數據的分化管理。作為MySQL數據庫中的一個重要機制,MySQL分區表優點和限制也是一目了然的,然而又能夠同時實現共存。
一、我們先來看MySQL分區表優點:
1、與單個磁盤或文件系統分區相比,可以存儲更多的數據。
2、對于那些已經失去保存意義的數據,通常可以通過刪除與那些數據有關的分區,很容易地刪除那些數據。相反地,在某些情況下,添加新數據的過程又可以通過為那些新數據專門增加一個新的分區,來很方便地實現。
3、一些查詢可以得到極大的優化,這主要是借助于滿足一個給定WHERE語句的數據可以只保存在一個或多個分區內,這樣在查找時就不用查找其他剩余的分區。因為分區可以在創建了分區表后進行修改,所以在第一次配置分區方案時還不曾這么做時,可以重新組織數據,來提高那些常用查詢的效率。
4、涉及到例如SUM()和COUNT()這樣聚合函數的查詢,可以很容易地進行并行處理。這種查詢的一個簡單例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通過“并行”,這意味著該查詢可以在每個分區上同時進行,最終結果只需通過總計所有分區得到的結果。
5、通過跨多個磁盤來分散數據查詢,來獲得更大的查詢吞吐量。
二、 說完了MySQL分區表優點,我們再來說說MySQL分區表限制。
1、因為需要根據分區列來確定數據所在分區,所以分區列必須作為查詢條件, 如果不使用分區列的查詢條件,那么就無法進行分區過濾,Mysql最終會掃描所有分區。
2、所有分區都必須使用相同的存儲引擎。
3、某些存儲引擎不支持分區(MERGE、CSV、FEDERATED)。
4、一張表最多只能有1024個分區。
5、分區表中無法對非分區列建立唯一索引(Unique Index)。
6、分區表中無法使用外鍵。
7 、打開并鎖住所有底層表的成本可能很高。
當查詢訪問分區表的時候,MySQL需要打開并鎖住所有的底層表,這是分區表的另一個開銷。這個操作在分區過濾之前發生,所以無法通過分區過濾降低此開銷,并且該開銷也和分區類型無關,會影響所有的查詢。
8、維護分區的成本可能很高
某些分區維護操作的速度會非常快,例如新增或者刪除分區。而有些操作,例如充足分區或類似alter語句的操作;這類操作需要賦值數據。重組分區的原理與alter類似,先創建一個臨時的分區,然后將數據賦值到其中,然后在刪除原分區。
9、分區的字段,必須是表上所有的唯一索引(或者主鍵索引)包含的字段的子集。一個表上有一個或者多個唯一索引的情況下,分區的字段必須被包含在所有的主鍵或者唯一索引字段中。
10、分區鍵非NULL約束
如果分區鍵所在列沒有notnull約束,如果是range分區表,那么null行將被保存在范圍最小的分區。如果是list分區表,那么null行將被保存到list為0的分區。
在按HASH和KEY分區的情況下,任何產生NULL值的表達式mysql都視同它的返回值為0。為了避免這種情況的產生,建議分區鍵設置成NOT NULL。
11、分區鍵必須是INT類型,或者通過表達式返回INT類型,可以為NULL。唯一的例外是當分區類型為KEY分區的時候,可以使用其他類型的列作為分區鍵( BLOB or TEXT 列除外)。
12、只有RANG和LIST分區能進行子分區,HASH和KEY分區不能進行子分區。
以上就是為大家羅列出的MySQL分區表的優點和限制,我們不難看出盡管MySQL分區表有著十分出眾的優點,但其本身存在的限制也是很多的,這就需要我們通過不斷的改善和發展技術來實現MySQL分區表的發展。在本站的MySQL教程中還有很多MySQL分區表背后的故事和發展的歷史,感興趣的小伙伴可以去看看,一般情況下,了解一下我們所學知識的背景和歷史還是有必要的。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習