標籤:mysql分區技術 一
4:MySQL 分區技術(是mysql 5.1以版本後開始用->是甲骨文mysql技術團隊維護人員以外掛程式形式插入到mysql裡面的技術)目前,針對海量資料的最佳化主要有2中方法:1:大表拆成小表的方式(物理上)一:垂直分表->一張垂直切成幾張二:水平分表(一般重點)->橫切,意思就是一張表有100個資料橫切10張表,一張表存10條(欄位一致)2:SQL語句的最佳化(可以通過增加索引等來調整,但是資料量大的增大會導致索引的維護代價增大)水平資料分割技術將一個表拆成多個表,比較常用的方式是將表中的記錄按照某種hash演算法進行拆分,簡單的拆分方法如取摸方式。同樣,這種分區方法也必須對前端的應用程式中的SQL進行修改方可以使用。而且對於一個SQL,它可能會修改兩個表,那麼你必須地寫出2個SQL語句從而可以完成一個邏輯事務,使得程式的判斷邏輯越來越複雜,這樣也導致程式的維護代價高,也就失去了採用資料庫的優勢。*因此:分區技術可以有力地避免如上的弊端,成為解決海量資料存放區的有力方法。分區技術:->>有效解決了:物理上拆分多個表,邏輯上操作一個表表明不變->>MySQL分區技術介紹(*主要用的是range 和 list 分區*):-----分區在邏輯上是一張表,在硬體/物理上是多張表,就是拆分表索引和資料-----MySQL的分區技術不同與之前的分表技術,它與水平分表有點類似,但是它在邏輯層進行的水平分表,對與應用程式而言它還是一張表, MySQL5.1版本後有4中分區類型:一:RANGE分區(用的最多):基於屬於一個給定連續區間的列值(欄位),把多行分配給分區 -->基於女欄位為參考點來進行分區--將一個表拆分成:索引檔案,資料檔案分區儲存二:LIST分區:類似於按range分區,區別在於list分區是基於列值匹配一個離散值集合中的某個值來進行選擇(列裡面的值是固定值時候來進行分區,而且是枚舉類型的值適合用list分區 -->比如說 性別:男,女)三:HASH分區:基於使用者定義的運算式的傳回值來進行選擇的分區,改運算式使用將要插入到表中的這些行的 列值計算,這個函數可以包含MySQL中有效、產生負整數值的任何錶達式 --->把每次插入的資料隨機的平均的分配到多個分區裡面,最終多個分區裡面的資料時平均分配的,但是每個分區裡面的數值肯能不太一樣,因為是隨機分配的(一般可以用來做MySQL分區的測試來使用)四:KEY分區:類似於按hash分區,區別在於key分區只支援計算一列或多列,且MySQL伺服器提供其自身的雜湊函數測試一下(測試用hash類型的):->myisam增刪改查的速度快create table t2(id int)engine=myisampartition by hash(id)partitions 5; ->能後當你插入資料的時候就會隨機分配插入個個分區中建立一個儲存\d // ->修改結束符號 之前是;號改成 //create procedure p5()beginset @i=1;while @i<100000 doinsert into t4 values(@i);set @[email protected]+1;end while;end //執行剛才建立的儲存call p3() ->表p3就插入了9999條資料innodb的資料結構:分為:共用資料表空間及其獨佔資料表空間一:innodb表結構共用資料表空間不能做成分區表:所有檔案的資料和索引都在ibddata1(比如你建了2個表會對應產生frm檔案,但是2個表的所有資料和索引全部在這個檔案裡面共用,所有不能對錶做正真的分區,初始值是10M)原因:資料和索引全都是放在一個檔案裡面 .ibddata1檔案二:innodb表結構要想做出分區表必須是“獨佔資料表空間”原因:資料和索引全都是獨立的一個檔案 開啟獨佔空間:(*必須設定檔中開啟檔案才能做出獨佔資料表空間,才能做成分區表*)innodb_data_home_dir = C:\mysql\datainnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = C:\mysql\datainnodb_file_per_table=1 ->設定檔中innodb下方加上重啟:MySQL -->pkill mysqld 關閉進程 重新啟動MySQL-bin/mysqld_safe --user=mysql & 測試:create table t4(id int)engine=innodbpartition by RANGE(id)(partition p0 values less than(10000),partition p1 values less than(20000),PARTITION p2 VALUES less than MAXVALUE);能後你在建立innodb類型的資料表後,你會發現建一個x表就有x.frm x.ibd檔案,就不會和其他表放到一起從而做表分區*重點總結:只有把innodb設定成獨立的資料表空間後,才能建立innodb表引擎的表分區相關命令:/s; 查看詳細資料版本啊編碼啊 什麼的。。。show engines; 查看預設表引擎show plugins; 查看當前MySQL的所有外掛程式,可以查看是否支援分區partitionshow index from from tabName; 查看索引show procedure status; 查看簡曆的儲存