亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL分區學習

發布時間:2020-08-08 20:36:23 來源:ITPUB博客 閱讀:161 作者:yepkeepmoving 欄目:MySQL數據庫

https://dev.mysql.com/doc/refman/5.7/en/alter-table-partition-operations.html

一、      分區概述

分區是一種表設計模式,自5.1版本開始支持分區,邏輯上是一張表,物理上可能是多個對象。其中MyISAMINNODBNDB等存儲引擎都支持分區,但CSVMERGEFEDORATED不支持分區。

1.      分區種類

水平分區:對表記錄進行拆分,同一表的不同行記錄分配到不同的物理文件中。

         Range 分區:行根據基于屬于一個給定連續區間的列值放入分區,自MYSQL5.5開始支持列范圍分區,最常用的分區。

         List分區:和Range分區一樣,只是List分區是面對離散值,自MYSQL5.5開支支持列List分區。

         Hash分區:根據用戶自定義的表達式的返回值進行分區,返回值不能為負數。

         Key分區:根據MYSQL數據庫提供的散列函數來進行分區。

 

垂直分區:對表字段進程拆分(MYSQL暫不支持),同一表中不同的列分配在不同的物理文件中。

 

2.      分區優、缺點

優點:

         可極大提高查詢效率;

         主要用于數據庫的高可用性,方便管理;

 缺點:

         無論何種分區,如果表中存在主鍵或者唯一鍵索引,分區列必須是唯一索引的一個組成部分。

 

二、      分區類型詳解

1.      Range分區

 create table t_range(id int)

partition by range(id)

(partition p0 values less than (100),

partition p1 values less than(500),

partition p2 values less than maxvalue );

 

insert into t_range values(10),(120),(600);

 (root:localhost:Sat Jul  8 20:05:12 2017)[dbtest]> \! ls -lnrth /home/mysql/dbtest

total 320K

-rw-rw---- 1 500 500   61 Mar 17 15:58 db.opt

-rw-rw---- 1 500 500   32 Jul  8 20:04 t_range.par               ##存儲分區信息

-rw-rw---- 1 500 500 8.4K Jul  8 20:04 t_range.frm

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p2.ibd

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 20:05 t_range#P#p0.ibd

 

(root:localhost:Sat Jul  8 20:14:13 2017)[(none)]> select * from information_schema.partitions where table_name='t_range' \G

*************************** 1. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p0

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 1

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: 100

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    NODEGROUP: default

              TABLESPACE_NAME: NULL

*************************** 2. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p1

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 2

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: 500

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    NODEGROUP: default

              TABLESPACE_NAME: NULL

*************************** 3. row ***************************

                TABLE_CATALOG: def

                 TABLE_SCHEMA: dbtest

                   TABLE_NAME: t_range

               PARTITION_NAME: p2

            SUBPARTITION_NAME: NULL

   PARTITION_ORDINAL_POSITION: 3

SUBPARTITION_ORDINAL_POSITION: NULL

             PARTITION_METHOD: RANGE

          SUBPARTITION_METHOD: NULL

         PARTITION_EXPRESSION: id

      SUBPARTITION_EXPRESSION: NULL

        PARTITION_DESCRIPTION: MAXVALUE

                   TABLE_ROWS: 1

               AVG_ROW_LENGTH: 16384

                  DATA_LENGTH: 16384

              MAX_DATA_LENGTH: NULL

                 INDEX_LENGTH: 0

                    DATA_FREE: 0

                  CREATE_TIME: NULL

                  UPDATE_TIME: NULL

                   CHECK_TIME: NULL

                     CHECKSUM: NULL

            PARTITION_COMMENT:

                    NODEGROUP: default

              TABLESPACE_NAME: NULL

3 rows in set (0.00 sec)

 

2.      List分區

 

-rw-rw---- 1 500 500   28 Jul  8 21:39 t_list.par

-rw-rw---- 1 500 500 8.4K Jul  8 21:39 t_list.frm

-rw-rw---- 1 500 500  96K Jul  8 21:39 t_list#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:39 t_list#P#p0.ibd

 

CREATE TABLE `t_list` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

/*!50100 PARTITION BY LIST (id)

(PARTITION p0 VALUES IN (1,3,5,7,9) ENGINE = InnoDB,

 PARTITION p1 VALUES IN (2,4,6,8,10) ENGINE = InnoDB) */;

 

3.      Hash分區

HASH分區將數據均勻的分布到預先定義的各個分區中,保障各個分區的數據數量大致一樣的。在rangelist分區定義時,必須明確指定分區的列值或列值集合保存在哪個分區中,而hash分區自動完成列值的分配,平均的將數據放在不同的分區。

 

CREATE TABLE `t_hash` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

/*!50100 PARTITION BY HASH (id)

PARTITIONS 4 */

 

-rw-rw---- 1 500 500   32 Jul  8 21:53 t_hash.par

-rw-rw---- 1 500 500 8.4K Jul  8 21:53 t_hash.frm

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p3.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p2.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p1.ibd

-rw-rw---- 1 500 500  96K Jul  8 21:54 t_hash#P#p0.ibd

 

4.      Key分區

Hash分區根據用戶自定義的函數進行分區,key使用MYSQL數據庫提供的函數進行分區。

CREATE TABLE `t_key` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

/*!50100 PARTITION BY KEY (id)

PARTITIONS 4 */;

5.      Columns分區

RangeListHashKey分區都是針對整型分區,如果不是整型分區,則需要通過相關函數轉換。但通過columns分區,不需要轉換。

Columns支持int/small int/tinyint/bigint/date/datetime/char/varchar/binary支持,對float/decimal/blob/text不支持

create table t_range_columns(dtime datetime)

partition by range columns (dtime)

(partition p0 values less than ('2016-01-01'),

partition p1 values less than('2017-01-01'),

partition p2 values less than maxvalue );

6.      子分區

在分區的基礎上再進行分區,也稱之為復合分區。

 

三、      分區維護管理

Alter table table_name

  | ADD PARTITION (partition_definition)

  | DROP PARTITION partition_names

  | TRUNCATE PARTITION {partition_names | ALL }

  | COALESCE PARTITION number

  | REORGANIZE PARTITION partition_names INTO (partition_definitions)

  | ANALYZE PARTITION  {partition_names | ALL }

  | CHECK PARTITION  {partition_names | ALL }

  | OPTIMIZE PARTITION  {partition_names | ALL }

  | REBUILD PARTITION  {partition_names | ALL }

  | REPAIR PARTITION  {partition_names | ALL }

  | REMOVE PARTITIONING

 

1.      增加分區

alter table t_range add partition ( partition p2 values less than  maxvalue) ;

 

2.      刪除分區

alter table t_range drop partition p2;

alter table t_list remove partitioning;

 

3.      查看分區

 

information_schema.partitions

 

4.      清除分區數據

 

alter table t_range truncate partition p2;

 

5.      解析分區

 

(root:localhost:Sat Jul  8 21:30:03 2017)[dbtest]> explain partitions select * from  t_range \G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: t_range

   partitions: p0,p1,p2

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 3

        Extra: NULL

1 row in set (0.00 sec)

 

(root:localhost:Sat Jul  8 21:30:18 2017)[dbtest]> explain partitions select * from  t_range  where id=800\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: t_range

   partitions: p2

         type: ALL

possible_keys: NULL

          key: NULL

      key_len: NULL

          ref: NULL

         rows: 2

        Extra: Using where

1 row in set (0.00 sec)

(只查詢指定的分區)

 

6.      交換分區

MYSQL5.6支持了交換分區,具體語法如下:

 

alter table t_range  exchange partition p0 with table t;

 

將分區表t_rangeP0分區的數據交換到t表中,而t表的數據也會交換到t_range表中,交換是雙向的。

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

微山县| 无极县| 沭阳县| 广南县| 资阳市| 株洲县| 兰西县| 津南区| 都江堰市| 平乡县| 沧源| 宁明县| 万全县| 南木林县| 德江县| 普兰店市| 泊头市| 綦江县| 积石山| 安阳市| 榆林市| 报价| 新竹县| 大同县| 扶余县| 司法| 莆田市| 广宁县| 常宁市| 鄄城县| 上饶市| 沾化县| 抚松县| 古浪县| 汉阴县| 衡东县| 武安市| 靖西县| 唐海县| 阳春市| 尼木县|