最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql的分區(qū)技術(shù)詳細(xì)介紹

 更新時(shí)間:2015年03月16日 10:24:40   投稿:junjie  
這篇文章主要介紹了mysql的分區(qū)技術(shù)詳細(xì)介紹,本文講解了分區(qū)技術(shù)概述、分區(qū)的類型及分區(qū)操作等內(nèi)容,需要的朋友可以參考下

一、概述

當(dāng) MySQL的總記錄數(shù)超過(guò)了100萬(wàn)后,會(huì)出現(xiàn)性能的大幅度下降嗎?答案是肯定的,但是,性能下降>的比率不一而同,要看系統(tǒng)的架構(gòu)、應(yīng)用程序、還有>包括索引、服務(wù)器硬件等多種因素而定。當(dāng)有網(wǎng)友問(wèn)我這個(gè)問(wèn)題的時(shí)候,我最常見(jiàn)的回答>就是:分表,可以根據(jù)id區(qū)間或者時(shí)間先后順序等多種規(guī)則來(lái)分表。分表很容易,然而由此所帶來(lái)的應(yīng)用程序甚至是架構(gòu)方面的改動(dòng)工作卻不>容小覷,還包括將來(lái)的擴(kuò)展性等。

在以前,一種解決方案就是使用 MERGE
類型,這是一個(gè)非常方便的做飯。架構(gòu)和程序基本上不用做改動(dòng),不過(guò),它的缺點(diǎn)是顯見(jiàn)的:

1.只能在相同結(jié)構(gòu)的 MyISAM 表上使用
2.無(wú)法享受到 MyISAM 的全部功能,例如無(wú)法在 MERGE 類型上執(zhí)行 FULLTEXT 搜索
3.它需要使用更多的文件描述符
4.讀取索引更慢

這個(gè)時(shí)候,MySQL 5.1 中新增的分區(qū)(Partition)功能的優(yōu)勢(shì)也就很明顯了:

1.與單個(gè)磁盤或文件系統(tǒng)分區(qū)相比,可以存儲(chǔ)更多的數(shù)據(jù)
2.很容易就能刪除不用或者過(guò)時(shí)的數(shù)據(jù)
3.一些查詢可以得到極大的優(yōu)化
4.涉及到 SUM()/COUNT() 等聚合函數(shù)時(shí),可以并行進(jìn)行
5.IO吞吐量更大

分區(qū)允許可以設(shè)置為任意大小的規(guī)則,跨文件系統(tǒng)分配單個(gè)表的多個(gè)部分。實(shí)際上,表的不同部分在不同的位置被存儲(chǔ)為單獨(dú)的表。

分區(qū)應(yīng)該注意的事項(xiàng):

1、 做分區(qū)時(shí),要么不定義主鍵,要么把分區(qū)字段加入到主鍵中。
2、 分區(qū)字段不能為NULL,要不然怎么確定分區(qū)范圍呢,所以盡量NOT NULL

二、分區(qū)的類型

1.RANGE 分區(qū):基于屬于一個(gè)給定連續(xù)區(qū)間的列值,把多行分配給分區(qū)。
2.LIST 分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個(gè)離散值集合中的某個(gè)值來(lái)進(jìn)行選擇。
2.HASH分區(qū):基于用戶定義的表達(dá)式的返回值來(lái)進(jìn)行選擇的分區(qū),該表達(dá)式使用將要插入到表中的這些行的列值進(jìn)行計(jì)算。這個(gè)函數(shù)可以包>含MySQL中有效的、產(chǎn)生非負(fù)整數(shù)值的任何表達(dá)式。
3.KEY分區(qū):類似于按HASH分區(qū),區(qū)別在于KEY分區(qū)只支持計(jì)算一列或多列,且MySQL服務(wù)器提供其自身的哈希函數(shù)。必須有一列或多列包含>整數(shù)值。

可以通過(guò)使用SHOW VARIABLES命令來(lái)確定MySQL是否支持分區(qū),例如:

復(fù)制代碼 代碼如下:

mysql> SHOW VARIABLES LIKE '%partition%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| have_partition_engine | YES   |
+-----------------------+-------+
1 row in set (0.00 sec)

復(fù)制代碼 代碼如下:

mysql> SHOW VARIABLES LIKE '%partition%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| have_partition_engine | YES   |
+-----------------------+-------+
1 row in set (0.00 sec)

1、range分區(qū)

復(fù)制代碼 代碼如下:

 create table t_range(
  id int(11),
  money int(11) unsigned not null,
  date datetime
  )partition by range(year(date))(
  partition p2007 values less than (2008),
  partition p2008 values less than (2009),
  partition p2009 values less than (2010)
  partition p2010 values less than maxvalue
  );

2.list分區(qū)

復(fù)制代碼 代碼如下:

create table t_list(
  a int(11),
  b int(11)
  )(partition by list (b)
  partition p0 values in (1,3,5,7,9),
  partition p1 values in (2,4,6,8,0)
  );

對(duì)于innodb和myisam引擎,一條語(yǔ)句插入多條記錄的時(shí)候,如果中間有值不能插入,innodb會(huì)全部回滾,myisam在錯(cuò)誤值之前的數(shù)據(jù)可以插入到表中。對(duì)于innodb和myisam引擎,一條語(yǔ)句插入多條記錄的時(shí)候,如果中間有值不能插入,innodb會(huì)全部回滾,myisam在錯(cuò)誤值之前的數(shù)據(jù)可以插入到表中。

3.hash分區(qū)

hash分區(qū)的目的是將數(shù)據(jù)均勻的分布到預(yù)先定義的各個(gè)分區(qū)中,保證各分區(qū)的數(shù)據(jù)量大致一致。

復(fù)制代碼 代碼如下:

create table t_hash(
  a int(11),
  b datetime
  )partition by hash (YEAR(b)
  partitions 4;

  hash的分區(qū)函數(shù)頁(yè)需要返回一個(gè)整數(shù)值。partitions子句中的值是一個(gè)非負(fù)整數(shù),不加的partitions子句的話,默認(rèn)為分區(qū)數(shù)為1。

4.key分區(qū)

key分區(qū)和hash分區(qū)相似,不同在于hash分區(qū)是用戶自定義函數(shù)進(jìn)行分區(qū),key分區(qū)使用mysql數(shù)據(jù)庫(kù)提供的函數(shù)進(jìn)行分區(qū),NDB cluster使用MD5函數(shù)來(lái)分區(qū),對(duì)于其他存儲(chǔ)引擎mysql使用內(nèi)部的hash函數(shù),這些函數(shù)基于password()一樣的算法。

復(fù)制代碼 代碼如下:

create table t_key(
  a int(11),
  b datetime)
  partition by key (b)
  partitions 4;

5。columns分區(qū)

上面的RANGE、LIST、HASH、KEY四種分區(qū)中,分區(qū)的條件必須是整形,如果不是整形需要通過(guò)函數(shù)將其轉(zhuǎn)換為整形。

  mysql-5.5開(kāi)始支持COLUMNS分區(qū),可視為RANGE和LIST分區(qū)的進(jìn)化,COLUMNS分區(qū)可以直接使用非整形數(shù)據(jù)進(jìn)行分區(qū)。COLUMNS分區(qū)支持以下數(shù)據(jù)類型:
  所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
  日期類型,如DATE和DATETIME。其余日期類型不支持。
  字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
  COLUMNS可以使用多個(gè)列進(jìn)行分區(qū)。

新增分區(qū)

復(fù)制代碼 代碼如下:

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


刪除分區(qū)
復(fù)制代碼 代碼如下:

--當(dāng)刪除了一個(gè)分區(qū),也同時(shí)刪除了該分區(qū)中所有的數(shù)據(jù)。

mysql> ALTER TABLE sale_data DROP PARTITION p201010;

Query OK, 0 rows affected (0.22 sec)

Records: 0  Duplicates: 0  Warnings: 0

分區(qū)的合并

下面的SQL,將p201001 - p201009 合并為3個(gè)分區(qū)p2010Q1 - p2010Q3

復(fù)制代碼 代碼如下:

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

相關(guān)文章

  • 關(guān)于MySQL 優(yōu)化的100個(gè)的建議

    關(guān)于MySQL 優(yōu)化的100個(gè)的建議

    MYSQL 如此方便和穩(wěn)定,以至于我們?cè)陂_(kāi)發(fā) WEB 程序的時(shí)候很少想到它。即使想到優(yōu)化也是程序級(jí)別的,比如,不要寫過(guò)于消耗資源的 SQL 語(yǔ)句。但是除此之外,在整個(gè)系統(tǒng)上仍然有很多可以優(yōu)化的地方。
    2016-01-01
  • MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法

    MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL學(xué)習(xí)筆記之?dāng)?shù)據(jù)的增、刪、改實(shí)現(xiàn)方法,簡(jiǎn)單介紹了mysql實(shí)現(xiàn)數(shù)據(jù)的增、刪、改相關(guān)語(yǔ)法與使用技巧,需要的朋友可以參考下
    2016-09-09
  • 深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析

    深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析

    本篇文章是對(duì)mysql "ON DUPLICATE KEY UPDATE"語(yǔ)法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)

    MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便)

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)GTID實(shí)現(xiàn)主從復(fù)制實(shí)現(xiàn)(超級(jí)方便),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼

    MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MySQL數(shù)據(jù)庫(kù)函數(shù)之JSON_EXTRACT示例代碼

    MySQL數(shù)據(jù)庫(kù)函數(shù)之JSON_EXTRACT示例代碼

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)函數(shù)之JSON_EXTRACT的相關(guān)資料,JSON_EXTRACT()函數(shù)用于從JSON文檔中提取值,支持對(duì)象屬性、數(shù)組元素和嵌套結(jié)構(gòu)的訪問(wèn),示例展示了如何提取簡(jiǎn)單值、嵌套值和數(shù)組中的值,需要的朋友可以參考下
    2025-02-02
  • MySQL中order by在子查詢中失效的問(wèn)題解決方案

    MySQL中order by在子查詢中失效的問(wèn)題解決方案

    這篇文章主要介紹了MySQL中order by在子查詢中失效的問(wèn)題解決,文中補(bǔ)充介紹了Mysql 5.7版本導(dǎo)致的子查詢order by排序無(wú)效問(wèn)題的探究,需要的朋友可以參考下
    2023-07-07
  • mysql中insert與select的嵌套使用方法

    mysql中insert與select的嵌套使用方法

    這篇文章主要介紹了mysql中insert與select的嵌套使用方法,代碼功能非常實(shí)用,需要的朋友可以參考下
    2014-07-07
  • 詳解MySQL中數(shù)據(jù)類型和字段類型

    詳解MySQL中數(shù)據(jù)類型和字段類型

    這篇文章主要為大家詳細(xì)介紹了MySQL中數(shù)據(jù)類型和字段類型的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下
    2022-09-09
  • 淺談MySQL與redis緩存的同步方案

    淺談MySQL與redis緩存的同步方案

    這篇文章主要介紹了淺談MySQL與redis緩存的同步方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

金秀| 台前县| 秦安县| 大厂| 垦利县| 桓仁| 简阳市| 安泽县| 富平县| 奉化市| 闵行区| 开封市| 凤台县| 佛教| 山东省| 汉沽区| 岑溪市| 台南县| 宁明县| 游戏| 柳河县| 湖口县| 专栏| 杭锦旗| 定安县| 吉木乃县| 济宁市| 和平县| 黔东| 宁远县| 璧山县| 即墨市| 客服| 盐亭县| 亳州市| 昌平区| 武陟县| 静海县| 兴国县| 恩平市| 南涧|