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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 字符列做日期分区_mysql 根据日期字段做表分区

發布時間:2024/1/23 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 字符列做日期分区_mysql 根据日期字段做表分区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql 的表分區有幾種類型, list, hash, range等, 今天我們介紹下日期分區, 假如與如下表:

新建mysql分區表CREATE?TABLE?core(???core_id?INT?NOT?NULL?AUTO_INCREMENT,???stamp?DATETIME,???data?VARCHAR(80),???PRIMARY?KEY(core_id,stamp)?)?PARTITION?BY?LIST(TO_DAYS(stamp))(???PARTITION?core_20100715?VALUES?IN?(TO_DAYS('2010-07-15')),???PARTITION?core_20100716?VALUES?IN?(TO_DAYS('2010-07-16'))?);

需要注意分區列必須包含在主鍵中, 否則mysql會報錯。

測試分區表

我們向表中插入一條數據:INSERT?INTO?core?(stamp,data)?VALUES?('20100715','a')

上面的sql語句應該會順利執行, 我們插入的日期范圍在分區字段指定的范圍內。

那么如果我們插入一條數據日期范圍不再分區字段范圍內,會如何呢?INSERT?INTO?core?(stamp,data)?VALUES?('20100717','x')

mysql會報錯:Error?Code:?1526.?Table?has?no?partition?for?value?734335

我們可以通過mysql的系統表information_schema.PARTITIONS查看分區的信息:SELECT?*?FROM?information_schema.PARTITIONS?WHERE?TABLE_NAME='core';

sql執行的內容如下:TABLE_CATALOG?TABLE_SCHEMA?TABLE_NAME?PARTITION_NAME?SUBPARTITION_NAME?PARTITION_ORDINAL_POSITION?SUBPARTITION_ORDINAL_POSITION?PARTITION_METHOD?SUBPARTITION_METHOD?PARTITION_EXPRESSION?SUBPARTITION_EXPRESSION?PARTITION_DESCRIPTION?TABLE_ROWS?AVG_ROW_LENGTH?DATA_LENGTH?MAX_DATA_LENGTH?INDEX_LENGTH?DATA_FREE?CREATE_TIME?UPDATE_TIME?CHECK_TIME?CHECKSUM?PARTITION_COMMENT?NODEGROUP?TABLESPACE_NAME?NULL?test?core?core_20100715?NULL?1?NULL?LIST?NULL?TO_DAYS(stamp)?NULL?734333?0?0?16384?NULL?0?4194304?NULL?NULL?NULL?NULL?default?NULL?NULL?test?core?core_20100716?NULL?2?NULL?LIST?NULL?TO_DAYS(stamp)?NULL?734334?0?0?16384?NULL?0?4194304?NULL?NULL?NULL?NULL?default?NULL

和我們的預期是一致的

可以通過下面的sql語句來添加新的分區, 如下sql給表新添一個分區ALTER?TABLE?core?ADD?PARTITION?(PARTITION?core_20100717?VALUES?IN?(TO_DAYS('2010-07-17')));

下面的sql語句可以刪除一個分區:ALTER?TABLE?core?DROP?PARTITION?core_20100717;

如果表創建的時候沒有創建分區,我們可以通過alter table來給表添上分區設置,如下sqlALTER?TABLE?core?PARTITION?BY?LIST(TO_DAYS(stamp))(???PARTITION?core_20100715?VALUES?IN?(TO_DAYS('2010-07-15')),???PARTITION?core_20100716?VALUES?IN?(TO_DAYS('2010-07-16'))?);

如果要給現有表刪除分區,可以通過下面的sql來操作:ALTER?TABLE?core?REMOVE?PARTITIONING;

添加和刪除分區并不會影響表中的數據, 但是添加分區時分區必須可以覆蓋表中現有的數據

如果服務器上有多塊磁盤,可以將不同的分區對應文件放到不同的磁盤上

如下sql語句將不同的分區放到了不同的目錄上面了ALTER?TABLE?core?PARTITION?BY?LIST(TO_DAYS(stamp))(???PARTITION?p20100715?VALUES?IN?(TO_DAYS('2010-07-15'))???DATA?DIRECTORY?'/data/2010-07-15'???INDEX?DIRECTORY?'/data/2010-07-15',???PARTITION?p20100716?VALUES?IN?(TO_DAYS('2010-07-16'))???DATA?DIRECTORY?'/data/2010-07-16'???INDEX?DIRECTORY?'/data/2010-07-16'?);

在執行上面的sql時有可能會遇到下面的錯誤You?may?get?this?error:?SQL?Error?(1210):?Incorrect?arguments?to?DATA?DIRECTORY

出現這個錯誤可能是因為這個目錄已經被其他mysql分區占用了, 分區路徑不能是mysql當前的數據路徑。 如果給分區指定路徑,最好獨立于mysql數據文件路徑

mysql官方文檔,分區資料很全面,可以作為參考

原文鏈接:http://outofmemory.cn/mysql/mysql-partition-by-date

打開App,閱讀手記

總結

以上是生活随笔為你收集整理的mysql 字符列做日期分区_mysql 根据日期字段做表分区的全部內容,希望文章能夠幫你解決所遇到的問題。

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