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

溫馨提示×

溫馨提示×

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

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

mysql表分區技術詳細介紹

發布時間:2020-08-18 12:53:24 來源:ITPUB博客 閱讀:141 作者:linmenglan1 欄目:MySQL數據庫

1、概述
    數據庫單表到達一定量后,性能會有衰減,像mysql\sql server等猶為明顯,所以需要把這些數據進行分區處理。同時有時候可能出現數據剝離什么的,分區表就更有用處了!
    MySQL 5.1 中新增的分區(Partition)功能就開始增加,優勢也越來越明顯了:
--與單個磁盤或文件系統分區相比,可以存儲更多的數據
--很容易就能刪除不用或者過時的數據
--一些查詢可以得到極大的優化
--涉及到 SUM()/COUNT() 等聚合函數時,可以并行進行
--IO吞吐量更大
--分區允許可以設置為任意大小的規則,跨文件系統分配單個表的多個部分。實際上,表的不同部分在不同的位置被存儲為單獨的表。

2、分區技術支持
    在5.6之前,使用這個參數查看當將配置是否支持分區
mysql> SHOW VARIABLES LIKE '%partition%';
+-----------------------+-------+
|Variable_name          | Value |
+-----------------------+-------+
| have_partition_engine | YES   |
+-----------------------+-------+
如果是yes表示你當前的配置支持分區
    在5.6及以采用后,則采用如下方式進行查看
mysql> SHOW PLUGINS;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
..................................................................................
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+
42 rows in set (0.00 sec)
最后一行,可以看到partition是ACTIVE的,表示支持分區

3、分區類型及舉例
3.1范圍分區
RANGE 分區:基于屬于一個給定連續區間的列值,把多行分配給分區。如時間,連續的常量值等
--按年分區
mysql> use mytest;
Database changed
mysql> create table range_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by range(year(credate))(
    -> partition p2011 values less than (2011),
    -> partition p2012 values less than (2012),
    -> partition p2013 values less than (2013),
    -> partition p2014 values less than (2014),
    -> partition p2015 values less than maxvalue
    -> );
Query OK, 0 rows affected (0.12 sec)

3.2列舉分區
LIST 分區:類似于按RANGE分區,區別在于LIST分區是基于列值匹配一個離散值集合中的某個值來進行選擇。比如說類似性別(1,2)等屬性值。
mysql> create table list_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by list(sex) (
    -> partition psex1 values in(1),
    -> partition psex2 values in(2));
Query OK, 0 rows affected (0.06 sec)

注意,list只能是數字,使用字符會報錯ERROR 1697 (HY000): VALUES value for partition 'psex1' must have type INT

3.3離散分區
HASH分區:基于用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的這些行的列值進行計算。這個函數可以包>含MySQL中有效的、產生非負整數值的任何表達式。
--以int字段hash分區
create table hash_p(
perid int(11),
pername char(12) not null,
sex int(1) not null,
monsalary DECIMAL(10,2),
credate datetime
) partition by hash (perid)
partitions 8;
--以時間函數hash分區
mysql> create table hash_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by hash (year(credate))
    -> partitions 8;
Query OK, 0 rows affected (0.11 sec)

3.4鍵值分區
KEY分區:類似于按HASH分區,區別在于KEY分區只支持計算一列或多列,且MySQL服務器提供其自身的哈希函數。必須有一列或多列包含>整數值。
其分區方法與hash很相似
mysql> create table key_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> sex int(1) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) partition by key (perid)
    -> partitions 8;
Query OK, 0 rows affected (0.12 sec)

3.5其它說明
mysql-5.5開始支持COLUMNS分區,可視為RANGE和LIST分區的進化,COLUMNS分區可以直接使用非整形數據進行分區。COLUMNS分區支持以下數據類型:
所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
日期類型,如DATE和DATETIME。其余日期類型不支持。
字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
COLUMNS可以使用多個列進行分區。

mysql> create table range_p(
    -> perid int(11),
    -> pername char(12) not null,
    -> monsalary DECIMAL(10,2),
    -> credate datetime
    -> ) PARTITION BY RANGE COLUMNS (credate)(
    -> partition p20151 values less than ('2015-04-01'),
    -> partition p20152 values less than ('2015-07-01'),
    -> partition p20153 values less than ('2015-10-01'),
    -> partition p20154 values less than ('2016-01-01'),
    -> partition p20161 values less than ('2016-04-01'),
    -> partition partlog values less than maxvalue
    -> );
Query OK, 0 rows affected (0.12 sec)

4、綜述
    總體說來,mysql的分區還在進步,需要進一步的加強,與oracle相比,還有差距!比如說基于非數據類型的分區技術,目前還沒有!

向AI問一下細節

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

AI

长沙县| 汝阳县| 湘乡市| 万全县| 云和县| 富源县| 拉孜县| 贡山| 晋州市| 洱源县| 贵州省| 延边| 偃师市| 达拉特旗| 永安市| 洞口县| 亳州市| 十堰市| 兴和县| 微山县| 洱源县| 张家口市| 哈尔滨市| 芒康县| 中西区| 松原市| 海宁市| 五常市| 革吉县| 铁岭市| 万年县| 兰溪市| 丹寨县| 岳阳市| 绥宁县| 广汉市| 惠安县| 彰武县| 固原市| 织金县| 龙海市|