版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 MySQL 分區(qū)和分表技術(shù)總結(jié) 日常開發(fā)中我們經(jīng)常會遇到大表的情況,所謂的大表是指存儲了百萬級乃至千萬級條記錄的表。這樣的表過于龐大,導(dǎo)致數(shù)據(jù)庫在查詢和插入的時候耗時太長,性能低下,如果涉及聯(lián)合查詢的情況,性能會更加糟糕。分表和表分區(qū)的目的就是減少數(shù)據(jù)庫的負擔(dān),提高數(shù)據(jù)庫的效率,通常點來講就是提高表的增刪改查效率。什么是分表?分表是將一個大表按照一定的規(guī)則分解成多張具有獨立存儲空間的實體表,我們可以稱為子表,每個表都對應(yīng)三個文件,MYD數(shù)據(jù)文件,.MYI索引文件,.frm表結(jié)構(gòu)文件。這些子表可以分布在同一塊磁盤上,也可以在不同的機器上。app讀寫的時候根據(jù)事先定義好的規(guī)則得到對應(yīng)的子表名,然
2、后去操作它。什么是分區(qū)?分區(qū)和分表相似,都是按照規(guī)則分解表。不同在于分表將大表分解為若干個獨立的實體表,而分區(qū)是將數(shù)據(jù)分段劃分在多個位置存放,可以是同一塊磁盤也可以在不同的機器。分區(qū)后,表面上還是一張表,但數(shù)據(jù)散列到多個位置了。app讀寫的時候操作的還是大表名字,db自動去組織分區(qū)的數(shù)據(jù)。mysql分表和分區(qū)有什么聯(lián)系呢?1.都能提高mysql的性高,在高并發(fā)狀態(tài)下都有一個良好的表現(xiàn)。2.分表和分區(qū)不矛盾,可以相互配合的,對于那些大訪問量,并且表數(shù)據(jù)比較多的表,我們可以采取分表和分區(qū)結(jié)合的方式(如果merge這種分表方式,不能和分區(qū)配合的話,可以用其他的分表試),訪問量不大,但是表數(shù)據(jù)很多的表
3、,我們可以采取分區(qū)的方式等。3.分表技術(shù)是比較麻煩的,需要手動去創(chuàng)建子表,app服務(wù)端讀寫時候需要計算子表名。采用merge好一些,但也要創(chuàng)建子表和配置子表間的union關(guān)系。4.表分區(qū)相對于分表,操作方便,不需要創(chuàng)建子表。分區(qū)又可以分為兩種:水平分區(qū)(Horizontal Partitioning)這種形式分區(qū)是對表的行進行分區(qū),通過這樣的方式不同分組里面的物理列分割的數(shù)據(jù)集得以組合,從而進行個體分割(單分區(qū))或集體分割(1個或多個分區(qū))。所有在表中定義的列在每個數(shù)據(jù)集中都能找到,所以表的特性依然得以保持。舉個簡單例子:一個包含十年發(fā)票記錄的表可以被分區(qū)為十個不同的分區(qū),每個分區(qū)包含的是其中
4、一年的記錄。(注:這里具體使用的分區(qū)方式我們后面再說,可以先說一點,一定要通過某個屬性列來分割,譬如這里使用的列就是年份)垂直分區(qū)(Vertical Partitioning)這種分區(qū)方式一般來說是通過對表的垂直劃分來減少目標表的寬度,使某些特定的列被劃分到特定的分區(qū),每個分區(qū)都包含了其中的列所對應(yīng)的行。舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經(jīng)常被訪問,這時候就要把這些不經(jīng)常使用的text和BLOB了劃分到另一個分區(qū),在保證它們數(shù)據(jù)相關(guān)性的同時還能提高訪問速度。分區(qū)表的原理分區(qū)表是由多個相關(guān)的底層表實現(xiàn),這些底層表也是由句柄對象表示,所以我們也可以直接
5、訪問各個分區(qū),存儲引擎管理分區(qū)的各個底層表和管理普通表一樣(所有的底層表都必須使用相同的存儲引擎),分區(qū)表的索引只是在各個底層表上各自加上一個相同的索引,從存儲引擎的角度來看,底層表和一個普通表沒有任何不同,存儲引擎也無須知道這是一個普通表還是一個分區(qū)表的一部分。在分區(qū)表上的操作按照下面的操作邏輯進行:select查詢:當查詢一個分區(qū)表的時候,分區(qū)層先打開并鎖住所有的底層表,優(yōu)化器判斷是否可以過濾部分分區(qū),然后再調(diào)用對應(yīng)的存儲引擎接口訪問各個分區(qū)的數(shù)據(jù)insert操作:當寫入一條記錄時,分區(qū)層打開并鎖住所有的底層表,然后確定哪個分區(qū)接受這條記錄,再將記錄寫入對應(yīng)的底層表delete操作:當刪除
6、一條記錄時,分區(qū)層先打開并鎖住所有的底層表,然后確定數(shù)據(jù)對應(yīng)的分區(qū),最后對相應(yīng)底層表進行刪除操作update操作:當更新一條數(shù)據(jù)時,分區(qū)層先打開并鎖住所有的底層表,mysql先確定需要更新的記錄在哪個分區(qū),然后取出數(shù)據(jù)并更新,再判斷更新后的數(shù)據(jù)應(yīng)該放在哪個分區(qū),然后對底層表進行寫入操作,并對原數(shù)據(jù)所在的底層表進行刪除操作雖然每個操作都會打開并鎖住所有的底層表,但這并不是說分區(qū)表在處理過程中是鎖住全表的,如果存儲引擎能夠自己實現(xiàn)行級鎖,如:innodb,則會在分區(qū)層釋放對應(yīng)的表鎖,這個加鎖和解鎖過程與普通Innodb上的查詢類似。在下面的場景中,分區(qū)可以起到非常大的作用:A:表非常大以至于無法全
7、部都放在內(nèi)存中,或者只在表的最后部分有熱點數(shù)據(jù),其他都是歷史數(shù)據(jù)B:分區(qū)表的數(shù)據(jù)更容易維護,如:想批量刪除大量數(shù)據(jù)可以使用清除整個分區(qū)的方式。另外,還可以對一個獨立分區(qū)進行優(yōu)化、檢查、修復(fù)等操作C:分區(qū)表的數(shù)據(jù)可以分布在不同的物理設(shè)備上,從而高效地利用多個硬件設(shè)備D:可以使用分區(qū)表來避免某些特殊的瓶頸,如:innodb的單個索引的互斥訪問,ext3文件系統(tǒng)的inode鎖競爭等E:如果需要,還可以備份和恢復(fù)獨立的分區(qū),這在非常大的數(shù)據(jù)集的場景下效果非常好F:優(yōu)化查詢,在where字句中包含分區(qū)列時,可以只使用必要的分區(qū)來提高查詢效率,同時在涉及sum()和count()這類聚合函數(shù)的查詢時,可以
8、在每個分區(qū)上面并行處理,最終只需要匯總所有分區(qū)得到的結(jié)果。mysql數(shù)據(jù)庫的分區(qū)總是把null當作比任何非null更小的值,這和數(shù)據(jù)庫中處理null值的order by操作是一樣的,升序排序時null總是在最前面,因此對于不同的分區(qū)類型,mysql數(shù)據(jù)庫對于null的處理也各不相同。對于range分區(qū),如果向分區(qū)列插入了null,則mysql數(shù)據(jù)庫會將該值放入最左邊的分區(qū),注意,如果刪除分區(qū),分區(qū)下的所有內(nèi)容都從磁盤中刪掉了,null所在分區(qū)被刪除,null值也就跟著被刪除了。在list分區(qū)下要使用null,則必須顯式地定義在分區(qū)的散列值中,否則插入null時會報錯。hash和key分區(qū)對于n
9、ull的處理方式和range,list分區(qū)不一樣,任何分區(qū)函數(shù)都會將null返回為0.分區(qū)分區(qū)就是將數(shù)據(jù)庫或其構(gòu)成元素劃分為不同的獨立部分是一種預(yù)先組織表存儲的方法mysql支持水平分區(qū)將特定表行分配為行的子集分區(qū)的分布是跨物理存儲進行的根據(jù)用戶在需要時設(shè)置的指定規(guī)則每個分區(qū)存儲為其自己的單元數(shù)據(jù)的劃分根據(jù)分區(qū)功能將數(shù)據(jù)劃分為子集分區(qū)類型和表達式是表定義的一部分表達式可以是整數(shù)或返回整數(shù)值的函數(shù)。此值根據(jù)定義確定將每條記錄存儲在哪個分區(qū)中1.primary key和unique key必須包含在分區(qū)key的一部分,否則在創(chuàng)建primary key和unique index時會報”ERROR 1
10、503 (HY000)“2.范圍分區(qū)添加分區(qū)只能在最大值后面追加分區(qū)3.所有分區(qū)的engine必須一樣4.范圍分區(qū)分區(qū)字段:integer、數(shù)值表達式、日期列,日期函數(shù)表達式(如year(),to_days(),to_seconds(),unix_timestamp()分表的幾種方式:1、mysql集群它并不是分表,但起到了和分表相同的作用。集群可分擔(dān)數(shù)據(jù)庫的操作次數(shù),將任務(wù)分擔(dān)到多臺數(shù)據(jù)庫上。集群可以讀寫分離,減少讀寫壓力。從而提升數(shù)據(jù)庫性能。2、自定義規(guī)則分表分區(qū)的類型range 根據(jù)屬于指定范圍的列值將行分配到分區(qū)list 根據(jù)與離散值集之一匹配的列將行分配到分區(qū)hash 基于由用戶定義
11、的表達式返回的值而選擇的分區(qū),對要插入表中的行的列值進行操作key 與hash類似,不同之處在于僅提供要評估的一個或多個列Composite(復(fù)合模式) 以上模式的組合使用InnoDB foreign keys and MySQL partitioning are not compatible. Partitioned InnoDB tables cannot have foreign key references, nor can they have columns referenced by foreign keys. InnoDB tables which have or which a
12、re referenced by foreign keys cannot be partitioned.分區(qū)的幾種方式實踐:Range:create table range(id int(11),money int(11) unsigned not null,date datetime)partition by range(year(date)(partition p2007 values less than (2008),partition p2008 values less than (2009),partition p2009 values less than (2010)partiti
13、on p2010 values less than maxvalue);List:create table list(a int(11),b int(11)(partition by list (b)partition p0 values in (1,3,5,7,9),partition p1 values in (2,4,6,8,0);Hash:create table hash(a int(11),b datetime)partition by hash (YEAR(b)partitions 4;Key:create table t_key(a int(11),b datetime)partition by key (b)partitions 4;分區(qū)管理新增分區(qū)ALTER TABLE sale_dataADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011);刪除分區(qū)-當刪除了一個分區(qū),也同時刪除了該分區(qū)中所有的數(shù)據(jù)。ALTER TABLE sale_data DROP PARTITION p201010;分區(qū)的合并下面的SQL,將p201001 - p201009 合并為3個分區(qū)p2010Q1 - p2010Q3ALTER TABLE sale_dataREORGANIZE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)物流服務(wù)商用車輛運輸協(xié)議樣本版
- 二零二四前期物業(yè)服務(wù)協(xié)議及社區(qū)文化活動服務(wù)合同3篇
- 2024年高端紅酒代理銷售合同協(xié)議
- 2025年度市場調(diào)研服務(wù)外包合同4篇
- 二零二四年個性化嬰兒護理服務(wù)與月嫂雇傭協(xié)議3篇
- 2025年茶店加盟管理合同范本簡易4篇
- 專業(yè)蝦苗供應(yīng)協(xié)議模板2024年適用版A版
- 2025年度航空器材產(chǎn)品定制采購服務(wù)協(xié)議4篇
- 2025年度城市地下綜合管廊建設(shè)施工合同9篇
- 2025年茶樓茶葉采購與營銷推廣合同范本4篇
- 《庖丁解?!帆@獎?wù)n件(省級公開課一等獎)-完美版PPT
- 化工園區(qū)危險品運輸車輛停車場建設(shè)標準
- 6月大學(xué)英語四級真題(CET4)及答案解析
- 氣排球競賽規(guī)則
- 電梯維修保養(yǎng)報價書模板
- 危險化學(xué)品目錄2023
- FZ/T 81024-2022機織披風(fēng)
- GB/T 33141-2016鎂鋰合金鑄錠
- JJF 1069-2012 法定計量檢定機構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 綜合管廊工程施工技術(shù)概述課件
- 公積金提取單身聲明
評論
0/150
提交評論