日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql表分区

發布時間:2025/4/5 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql表分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考地址:http://dev.mysql.com/doc/refman/5.6/en/partitioning.html

什么時候使用分區

  • 海量數據
  • 數據表索引大于服務器有效內存
  • ?

    分區的限制

  • 大部分只能對數據表的整型列進行分區,或者數據列可以通過分區函數轉化成整型列(其中COLUMNS支持 Integer / String / DATE / DATETIME類型)
  • 最大分區數目不能超過1024
  • 如果含有唯一索引或者主鍵,則分區列必須包含在所有的唯一索引或者主鍵內
  • 不支持外鍵
  • 不支持全文索引(fulltext)
  • 分區支持函數限制
  • ABS()

    CEILING()

    DAY()

    DAYOFMONTH()

    DAYOFWEEK()

    DAYOFYEAR()

    DATEDIFF()

    EXTRACT()?

    FLOOR()

    HOUR()

    MICROSECOND()

    MINUTE()

    MOD()

    MONTH()

    QUARTER()

    SECOND()

    TIME_TO_SEC()

    TO_DAYS()

    TO_SECONDS()

    UNIX_TIMESTAMP()

    WEEKDAY()

    YEAR()

    ?

    YEARWEEK()

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    MySQL支持RANGE,LIST,HASH,KEY分區類型,其中以RANGE最為常用:

  • Range(范圍)–這種模式允許將數據劃分不同范圍。例如可以將一個表通過年份劃分成若干個分區。
  • Hash(哈希)–這中模式允許通過對表的一個或多個列的Hash Key進行計算,最后通過這個Hash碼不同數值對應的數據區域進行分區。例如可以建立一個對表主鍵進行分區的表。
  • Key(鍵值)-上面Hash模式的一種延伸,這里的Hash Key是MySQL系統產生的。
  • List(預定義列表)–這種模式允許系統通過預定義的列表的值來對數據進行分割。
  • Composite(復合模式) –以上模式的組合使用 
  • ?

    分區SQL

    過濾分區表的WHERE條件必須是切分分區表的列

    range分區

    ALTER TABLE employees 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) );

    list分區

    ALTER TABLE employees PARTITION BY LIST(store_id) ( ??? PARTITION pNorth VALUES IN (3,5,6,9,17), ???PARTITION pEast VALUES IN (1,2,10,11,19,20), ??? PARTITION pWest VALUES IN (4,12,13,14,18), ??? PARTITION pCentral VALUES IN (7,8,15,16) );

    hash分區

    hash分區的目的是將數據均勻的分布到預先定義的各個分區中,保證各分區的數據量大致一致。

    ALTER TABLE employees PARTITION BY HASH(store_id) PARTITIONS 4;

    hash的分區函數頁需要返回一個整數值。partitions子句中的值是一個非負整數,不加的partitions子句的話,默認為分區數為1。

    key分區

    key分區和hash分區相似,不同在于hash分區是用戶自定義函數進行分區,key分區使用mysql數據庫提供的函數進行分區,NDB cluster使用MD5函數來分區,對于其他存儲引擎mysql使用內部的hash函數,這些函數基于password()一樣的算法。

    ALTER TABLE tm1 ?PARTITION BY KEY(s1) PARTITIONS 10;

    columns分區

    上面的RANGE、LIST、HASH、KEY四種分區中,分區的條件必須是整形,如果不是整形需要通過函數將其轉換為整形。

    mysql-5.5開始支持COLUMNS分區,可視為RANGE和LIST分區的進化,COLUMNS分區可以直接使用非整形數據進行分區。COLUMNS分區支持以下數據類型:

    所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。

    日期類型,如DATE和DATETIME。其余日期類型不支持。

    字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。

    COLUMNS可以使用多個列進行分區。

    ?

    子分區Subpartitioning

    ALTER TABLE ts? PARTITION BY RANGE( YEAR(purchased) ) ??? SUBPARTITION BY HASH( TO_DAYS(purchased) ) ??? SUBPARTITIONS 2 ( ??????? PARTITION p0 VALUES LESS THAN (1990), ??????? PARTITION p1 VALUES LESS THAN (2000), ??????? PARTITION p2 VALUES LESS THAN MAXVALUE ); ? ?

    管理分區

    增加分區 ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000)); 刪除分區 ALTER TABLE tr DROP PARTITION p2; 合并分區 ALTER TABLE members ??? REORGANIZE PARTITION p0 INTO ( ??????? PARTITION n0 VALUES LESS THAN (1960), ??????? PARTITION n1 VALUES LESS THAN (1970) );

    轉載于:https://www.cnblogs.com/leafsunday/p/6418133.html

    總結

    以上是生活随笔為你收集整理的Mysql表分区的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。