国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

介紹mysql重建表分區并保留數據的方法

2020-03-22 19:51:45
字體:
來源:轉載
供稿:網友
本文介紹mysql重建表分區并保留數據的方法,mysql的表分區(partition)可以把一個表的記錄分開多個區去存儲,查詢時可根據查詢的條件在對應的分區搜尋,而不需要整表查詢,提高查詢效率。

有分區的表與沒有分區的表使用上沒有太大的區別,但如果要對表進行重新分區,刪除分區重建會刪除數據,因此不可直接進行操作,需要使用一些特別的處理實現。

mysql重建表分區并保留數據的方法:

1.創建與原始表一樣結構的新表,新分區。
2.將原始表中數據復制到新表。
3.刪除原始表。
4.將新表名稱改為原始表名稱。

實例:

日志表原始結構如下,按id分區。

CREATE DATABASE `test`;use `test`;CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT 內容 , `status` tinyint(3) unsigned NOT NULL COMMENT 記錄狀態 , `addtime` int(11) unsigned NOT NULL COMMENT 添加時間 , `lastmodify` int(11) unsigned NOT NULL COMMENT 最后修改時間 , PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (id)(PARTITION p10w VALUES LESS THAN (100000) ENGINE = InnoDB,PARTITION p20w VALUES LESS THAN (200000) ENGINE = InnoDB,PARTITION p50w VALUES LESS THAN (500000) ENGINE = InnoDB,PARTITION p100w VALUES LESS THAN (1000000) ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;insert into `log`(content,status,addtime,lastmodify) html' target='_blank'>values( content1 ,1, unix_timestamp( 2018-01-11 00:00:00 ), unix_timestamp( 2018-01-11 00:00:00 )),( content2 ,1, unix_timestamp( 2018-02-22 00:00:00 ), unix_timestamp( 2018-02-22 00:00:00 )),( content3 ,1, unix_timestamp( 2018-03-31 00:00:00 ), unix_timestamp( 2018-03-31 00:00:00 

查看數據分區分布

SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA= test AND TABLE_NAME = log +----------------+------------+| PARTITION_NAME | TABLE_ROWS |+----------------+------------+| p10w | 3 || p20w | 0 || p50w | 0 || p100w | 0 || pmax | 0 |+----------------+------------+


日志數據需要按時間進行搜尋,因此需要按日志時間重建分區。

1.創建log2,按時間分區(每月1個分區)

CREATE TABLE `log2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT 內容 , `status` tinyint(3) unsigned NOT NULL COMMENT 記錄狀態 , `addtime` int(11) unsigned NOT NULL COMMENT 添加時間 , `lastmodify` int(11) unsigned NOT NULL COMMENT 最后修改時間 , PRIMARY KEY (`id`,`addtime`), KEY `id`(`id`), KEY `addtime`(`addtime`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (addtime)(PARTITION p201801 VALUES LESS THAN (unix_timestamp( 2018-02-01 00:00:00 )) ENGINE = InnoDB,PARTITION p201802 VALUES LESS THAN (unix_timestamp( 2018-03-01 00:00:00 )) ENGINE = InnoDB,PARTITION p201803 VALUES LESS THAN (unix_timestamp( 2018-04-01 00:00:00 )) ENGINE = InnoDB,PARTITION p201804 VALUES LESS THAN (unix_timestamp( 2018-05-01 00:00:00 )) ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;


2.將log的數據復制到log2

insert into `log2` select * from `log`;


3.刪除log表

drop table `log`;


4.將log2表改名為log

rename table `log2` to `log`;


執行后查看數據分區分布

SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA= test AND TABLE_NAME = log +----------------+------------+| PARTITION_NAME | TABLE_ROWS |+----------------+------------+| p201801 | 1 || p201802 | 1 || p201803 | 1 || p201804 | 0 || pmax | 0 |+----------------+------------+

可以看到log表的數據已經按新分區存儲。

本文介紹mysql重建表分區并保留數據的方法,更多相關內容請關注php 。

相關推薦:

php json_encode不支持對象私有屬性的解決方法

PHP生成唯一RequestID類的相關內容

js 基礎 數據類型及轉換 進制 操作符

以上就是介紹mysql重建表分區并保留數據的方法的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰台区| 壤塘县| 岳西县| 卢湾区| 孝昌县| 涡阳县| 北票市| 南阳市| 田林县| 贵州省| 台南市| 沁水县| 祁门县| 沧源| 灵武市| 达孜县| 洪江市| 天长市| 安康市| 麻城市| 商南县| 大厂| 三门县| 罗平县| 弋阳县| 内江市| 尼木县| 河北省| 常山县| 霞浦县| 饶阳县| 苗栗县| 尼玛县| 宜州市| 莒南县| 宁河县| 汾西县| 德格县| 岗巴县| 鸡东县| 滦平县|