1、為什麼要採用分區?
當資料量過大的時候(通常是指百萬級或千萬級資料的時候),這個時候需要將一張表的資料分割幾張表格儲存。有些查詢可以得到極大的最佳化,這主要是藉用滿足一個給定WHERE語句的資料可以只保存在一個或多個分割區內,這樣在尋找時就不用找其他剩餘的分割區。
2、查看mysql是否支援分割區
透過以下指令去查看mysql是否支援分割區? ?
show variables like '%partition%';
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) partition BY RANGE (store_id) ( partition p0 VALUES LESS THAN (6), partition p1 VALUES LESS THAN (11), partition p2 VALUES LESS THAN (16), partition p3 VALUES LESS THAN (21) );
在這個例子中, 店內工人相關的所有行將保存在分區p0中,辦公室和支援人員相關的所有行保存在分區p1中,管理層相關的所有行保存在分區p2中。
查看分區
show create table employees;
LIST分區是透過使用"PARTITION BY LIST(expr)"來實現,其中"expr"是某列值或一個基於某一個列值、並傳回一個整數值的表達式,然後透過"VALUES IN (value_list)"的方式來定義每個分區,其中"value_list"是一個透過逗號分隔的整數列表。
create table category_part( cid int unsigned not null auto_increment,cname varchar(64) not null,parent_id int not null,primary key (cid,parent_id)) partition by list(parent_id)( partition p1 values in (1,2,3,6,9), partition p2 values in (4,5,10,22,23), partition p3 values in (7,8,11,12,13), partition p4 values in (14,15,16,17,20), partition p5 values in (18,19,21,24,25) );
5、HASH分區
hash分區的目的是將資料均勻的分佈到預先定義的各個分區中,保證各分區的資料數量大致一致。在RANGE和LIST分區中,必須明確指定一個給定的列值或列值集合應該保存在哪個分區中;而在HASH分區中,MYSQL自動完成這些工作,用戶所要做的只是基於將要被散列的列值指定一個列值或表達式,以及指定唄分區的表將要分割成的分區數量。
要使用HAHS分割區來分割一個表,要在CREATE TABLE語句上新增一個PARTITION BY HASH(expr)子句,其中「expr」是傳回一個整數的表達式。 expr可以只是欄位類型為整數的列名。此外,使用者很可能需要在後面再增加一個PARTITITIONS num子句,其中num是非負的整數,它表示將要被分割成分區的數量。如果沒有包含一個PARTITIONS子句,分割區數量預設為1.
create table t_hash ( a int, b datetime) partition by hash (YEAR(b)) partitions 4;
LINEAR HASH分割區的優點在於增加、刪除、合併和分割分割區將變得更加快捷,有利於處理含有大量資料的表。缺點在於,與使用HASH分區得到的資料分佈相比,各分區間資料的分佈可能不大均衡。
6、keys分區
create table orders_key ( id int auto_increment, customer_surname varchar(30), store_id int, alesperson_id int, order_Date date, note varcahr(500), index_idx(id) ) engine=myisam partition by key(order_date) partitions 4;
這個分區類似於hash分區,除了MySQL伺服器使用它本身的hash表達式,不像其他類型的分區,不必要求使用一個int或null的表達式。
以上就是MySQL高級十五-表格的分區的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!