程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql應用教程之分區表的應用辦法(刪除分區表)

mysql應用教程之分區表的應用辦法(刪除分區表)

編輯:MySQL綜合教程

mysql應用教程之分區表的應用辦法(刪除分區表)。本站提示廣大學習愛好者:(mysql應用教程之分區表的應用辦法(刪除分區表))文章只能為提供參考,不一定能成為您想要的結果。以下是mysql應用教程之分區表的應用辦法(刪除分區表)正文


MySQL應用分區表的利益:

1,可以把一些歸類的數據放在一個分區中,可以削減辦事器檢討數據的數目加速查詢。
2,便利保護,經由過程刪除分區來刪除老的數據。
3,分區數據可以被散布到分歧的物理地位,可以做散布式有用應用多個硬盤驅動器。

MySQL可以樹立四種分區類型的分區:

RANGE 分區:基於屬於一個給定持續區間的列值,把多行分派給分區。

LIST 分區:相似於按RANGE分區,差別在於LIST分區是基於列值婚配一個團圓值聚集中的某個值來停止選擇。  www.jb51.net 

HASH分區:基於用戶界說的表達式的前往值來停止選擇的分區,該表達式應用將要拔出到表中的這些行的列值停止盤算。這個函數可以包括MySQL 中有用的、發生非負整數值的任何表達式。

KEY 分區:相似於按HASH分區,差別在於KEY分區只支撐盤算一列或多列,且MySQL 辦事器供給其本身的哈希函數。必需有一列或多列包括整數值。

普通用很多的是range分區和list分區。
RANGE分區
這裡以一個發賣的營業來做測試
發賣表有日期/商品/發賣額三個字段
測試數據從2010年1月1日至2010年9月31日
以“月”為單元停止分區
早期分區界說
起首須要檢查,以後數據庫能否支撐分區


mysql>SHOW VARIABLES LIKE '%partition%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |

+-------------------+-------+
1 row in set (0.03 sec)

創立分區表,依照年代的方法分區。

mysql> CREATE TABLE sale_data (
    ->   sale_date  DATETIME NOT NULL,

    ->   sale_item  VARCHAR(2) NOT NULL ,

    ->   sale_money DECIMAL(10,2) NOT NULL

    -> )  www.jb51.net 

    -> PARTITION BY RANGE (YEAR(sale_date)*100+MONTH(sale_date)) (

    ->   PARTITION p201001 VALUES LESS THAN (201002),

    ->   PARTITION p201002 VALUES LESS THAN (201003),

    ->   PARTITION p201003 VALUES LESS THAN (201004),

    ->   PARTITION p201004 VALUES LESS THAN (201005),

    ->   PARTITION p201005 VALUES LESS THAN (201006),

    ->   PARTITION p201006 VALUES LESS THAN (201007),

    ->   PARTITION p201007 VALUES LESS THAN (201008),

    ->   PARTITION p201008 VALUES LESS THAN (201009),

    ->   PARTITION p201009 VALUES LESS THAN (201010),

    ->   PARTITION pcatchall VLAUES LESS THAN MAXVALUE
    -> );

Query OK, 0 rows affected (0.20 sec)

新增分區


mysql> ALTER TABLE sale_data
    ->   ADD PARTITION (PARTITION p201010 VALUES LESS THAN (201011));

Query OK, 0 rows affected (0.36 sec)
Records: 0  Duplicates: 0  Warnings: 0

刪除分區


--當刪除一個分區,也同時刪除該分區中一切的數據。
mysql> ALTER TABLE sale_data DROP PARTITION p201010;
Query OK, 0 rows affected (0.22 sec)  www.jb51.net 
Records: 0  Duplicates: 0  Warnings: 0

分區的歸並

上面的SQL,將p201001 - p201009 歸並為3個分區p2010Q1 - p2010Q3


mysql> ALTER TABLE sale_data
    ->   REORGANIZE PARTITION p201001,p201002,p201003,

    ->                        p201004,p201005,p201006,

    ->                        p201007,p201008,p201009 INTO

    -> (

    ->   PARTITION p2010Q1 VALUES LESS THAN (201004),

    ->   PARTITION p2010Q2 VALUES LESS THAN (201007),

    ->   PARTITION p2010Q3 VALUES LESS THAN (201010)

    -> );

Query OK, 0 rows affected (1.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

分區的拆分

上面的SQL,將p2010Q1 分區,拆分為s2009 與s2010 兩個分區


mysql> ALTER TABLE sale_data REORGANIZE PARTITION p2010Q1 INTO (

    ->     PARTITION s2009 VALUES LESS THAN (201001),
             www.jb51.net 
    ->     PARTITION s2010 VALUES LESS THAN (201004)

    -> );

Query OK, 0 rows affected (0.36 sec)
Records: 0  Duplicates: 0  Warnings: 0

一個應用分歧物理地位數據源做分區的例子:


CREATE TABLE ts (id INT, purchased DATE)
    ENGINE=innodb
    PARTITION BY RANGE(YEAR(purchased))
    SUBPARTITION BY HASH(id)
    (
        PARTITION p0 VALUES LESS THAN (1990)
        (
            SUBPARTITION s0                  //在年夜的分區下又有小的分區
            DATA DIRECTORY='/usr/local/mysql/data0'      //數據源
            INDEX DIRECTORY='/usr/local/mysql/index0',   //索引數據源
            SUBPARTITION s1
            DATA DIRECTORY='/usr/local/mysql/data1'
            INDEX DIRECTORY='/usr/local/mysql/index1'
        ),
        PARTITION p1 VALUES LESS THAN (MAXVALUE)
        (
            SUBPARTITION s2
            DATA DIRECTORY='/usr/local/mysql/data1'
            INDEX DIRECTORY='/usr/local/mysql/index1',
            SUBPARTITION s3
            DATA DIRECTORY='/usr/local/mysql/data2'
            INDEX DIRECTORY='/usr/local/mysql/index2'
        )
    );

分區索引的局限:
1,一切分區都要應用異樣的引擎。
2,分區表的每個獨一索引必需包括由分區函數援用的列。
3,mysql能防止查詢一切的分區,但依然鎖定了一切分區。
4,分區函數能應用的函數和表達式無限,例如函數有下面的4種。
5,分區不支撐外鍵。  www.jb51.net 
6,不克不及應用LOAD INDEX INTO CACHE
7,分區其實不能老是改良機能,要停止機能評測。
例如可使用expalin partitions 來檢查查詢語句能否應用分區過濾了數據:

mysql> explain partitions select * from fenqubiao where day<'2011-09-12';
+----+-------------+-----------+---------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table     | partitions    | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-----------+---------------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | fenqubiao | p_2010,p_2011 | ALL  | NULL          | NULL | NULL    | NULL |    2 | Using where |
+----+-------------+-----------+---------------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved