亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL分區(qū)表的正確使用方法

2024-07-25 19:09:29
字體:
供稿:網(wǎng)友

MySQL分區(qū)表概述

我們經(jīng)常遇到一張表里面保存了上億甚至過十億的記錄,這些表里面保存了大量的歷史記錄。 對于這些歷史數(shù)據(jù)的清理是一個非常頭疼事情,由于所有的數(shù)據(jù)都一個普通的表里。所以只能是啟用一個或多個帶where條件的delete語句去刪除(一般where條件是時間)。 這對數(shù)據(jù)庫的造成了很大壓力。即使我們把這些刪除了,但底層的數(shù)據(jù)文件并沒有變小。面對這類問題,最有效的方法就是在使用分區(qū)表。最常見的分區(qū)方法就是按照時間進行分區(qū)。

分區(qū)一個最大的優(yōu)點就是可以非常高效的進行歷史數(shù)據(jù)的清理。

1. 確認(rèn)MySQL服務(wù)器是否支持分區(qū)表

命令:

show plugins;

MySQL,分區(qū)表

2. MySQL分區(qū)表的特點

在邏輯上為一個表,在物理上存儲在多個文件中

HASH分區(qū)(HASH)

HASH分區(qū)的特點

  • 根據(jù)MOD(分區(qū)鍵,分區(qū)數(shù))的值把數(shù)據(jù)行存儲到表的不同分區(qū)中
  • 數(shù)據(jù)可以平均的分布在各個分區(qū)中
  • HASH分區(qū)的鍵值必須是一個INT類型的值,或是通過函數(shù)可以轉(zhuǎn)為INT類型

如何建立HASH分區(qū)表

以INT類型字段 customer_id為分區(qū)鍵

CREATE TABLE `customer_login_log` ( `customer_id` int(10) unsigned NOT NULL COMMENT '登錄用戶ID', `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用戶登錄時間', `login_ip` int(10) unsigned NOT NULL COMMENT '登錄IP', `login_type` tinyint(4) NOT NULL COMMENT '登錄類型:0未成功 1成功') ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶登錄日志表'PARTITION BY HASH(customer_id) PARTITIONS 4;

以非INT類型字段 login_time 為分區(qū)鍵(需要先轉(zhuǎn)換成INT類型)

CREATE TABLE `customer_login_log` ( `customer_id` int(10) unsigned NOT NULL COMMENT '登錄用戶ID', `login_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '用戶登錄時間', `login_ip` int(10) unsigned NOT NULL COMMENT '登錄IP', `login_type` tinyint(4) NOT NULL COMMENT '登錄類型:0未成功 1成功') ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶登錄日志表'PARTITION BY HASH(UNIX_TIMESTAMP(login_time)) PARTITIONS 4;

customer_login_log 表如果不分區(qū),在物理磁盤上文件為

customer_login_log.frm # 存儲表原數(shù)據(jù)信息customer_login_log.ibd # Innodb數(shù)據(jù)文件

如果按上面的建HASH分區(qū)表,則有五個文件

customer_login_log.frm customer_login_log#P#p0.ibdcustomer_login_log#P#p1.ibdcustomer_login_log#P#p2.ibdcustomer_login_log#P#p3.ibd

演示

MySQL,分區(qū)表

MySQL,分區(qū)表

MySQL,分區(qū)表

使用起來和不分區(qū)是一樣的,看起來只有一個數(shù)據(jù)庫,其實有多個分區(qū)文件,比如我們要插入一條數(shù)據(jù),不需要指定分區(qū),MySQL會自動幫我們處理

MySQL,分區(qū)表

查詢

MySQL,分區(qū)表

范圍分區(qū)(RANGE)

RANGE分區(qū)特點

  • 根據(jù)分區(qū)鍵值的范圍把數(shù)據(jù)行存儲到表的不同分區(qū)中
  • 多個分區(qū)的范圍要連續(xù),但是不能重疊
  • 默認(rèn)情況下使用VALUES LESS THAN屬性,即每個分區(qū)不包括指定的那個值

如何建立RANGE分區(qū)

MySQL,分區(qū)表

如果沒有定義p3分區(qū),當(dāng)插入的customer_id大于29999時會報錯,定義了則超過的數(shù)據(jù)都存入p3中

RANGE分區(qū)的適用場景

  • 分區(qū)鍵為日期或是時間類型 (可以使得各個分區(qū)表的數(shù)據(jù)比較均衡,如果按上面的例子中以整型id為分區(qū)鍵,假如活躍用戶集中在10000-19999之間,則p1中的數(shù)據(jù)量就會比其他分區(qū)的數(shù)據(jù)量大很多,這就失去了分區(qū)的意義;而且按時間類型分區(qū),如果要按時間順序進行數(shù)據(jù)的歸檔,則只需要對某一個分區(qū)進行歸檔就可以了)
  • 所有查詢中都包括分區(qū)鍵(避免跨分區(qū)查詢)
  • 定期按分區(qū)范圍清理歷史數(shù)據(jù)

LIST分區(qū)

LIST分區(qū)的特點

  • 按分區(qū)鍵取值的列表進行分區(qū)
  • 同范圍分區(qū)一樣,各分區(qū)的列表值不能重復(fù)
  • 每一行數(shù)據(jù)必須能找到對應(yīng)的分區(qū)列表,否則數(shù)據(jù)插入失敗

如何建立LIST分區(qū)

MySQL,分區(qū)表

如果插入一條login_type為10的數(shù)據(jù)行,則會報錯

3. 如何為登錄日志表(customer_login_log)分區(qū)

業(yè)務(wù)場景

  • 用戶每次登錄都會記錄customer_login_log日志
  • 用戶登錄日志保存一年,1年后可以刪除或者歸檔

登錄日志表的分區(qū)類型及分區(qū)鍵

  • 使用RANGE分區(qū)
  • 以login_time為分區(qū)鍵

分區(qū)后的用戶登錄日志表

按年份分區(qū)存儲,所以用YEAR函數(shù)進行了轉(zhuǎn)化

CREATE TABLE `customer_login_log` ( `customer_id` int(10) unsigned NOT NULL COMMENT '登錄用戶ID', `login_time` DATETIME NOT NULL COMMENT '用戶登錄時間', `login_ip` int(10) unsigned NOT NULL COMMENT '登錄IP', `login_type` tinyint(4) NOT NULL COMMENT '登錄類型:0未成功 1成功') ENGINE=InnoDB PARTITION BY RANGE (YEAR(login_time))(PARTITION p0 VALUES LESS THAN (2017),PARTITION p1 VALUES LESS THAN (2018),PARTITION p2 VALUES LESS THAN (2019)) 

插入并查詢數(shù)據(jù)

MySQL,分區(qū)表

查詢指定表中的分區(qū)數(shù)據(jù)情況

SELECT table_name,partition_name,partition_description,table_rows FROMinformation_schema.`PARTITIONS` WHERE table_name = 'customer_login_log';

MySQL,分區(qū)表

再插入2條18年的日志,會存入p2表中

MySQL,分區(qū)表

之前說過建立分區(qū)表時,最好建立一個MAXVALUE的分區(qū),這里之所以沒有建立,是為了數(shù)據(jù)維護的方便,如果我們建立了MAXVALUE分區(qū),很容易忽視一個問題,當(dāng)我們2019年有的數(shù)據(jù)插入時,會自動存入那個MAXVALUE分區(qū)中,之后在做數(shù)據(jù)維護時會不方便,所以沒有建立MAXVALUE分區(qū)

而是通過計劃任務(wù)的方式,在每年年底的時候增加這個分區(qū),比如我們現(xiàn)在在2018年年底,我們需要在日志表中為2019年建立日志分區(qū),否則2019年的日志都會插入失敗

MySQL,分區(qū)表

我們可以通過下面語句

增加分區(qū)

ALTER TABLE customer_login_log ADD PARTITION (PARTITION p3 VALUES LESS THAN(2020))

增加分區(qū),并插入數(shù)據(jù)

MySQL,分區(qū)表

刪除分區(qū)

假如我們現(xiàn)在要刪除2016年到2017年間一年的數(shù)據(jù),因為我們已經(jīng)做了分區(qū),所以只需要通過一條語句,刪除p0分區(qū)即可

ALTER TABLE customer_login_log DROP PARTITION p0;

MySQL,分區(qū)表

可以發(fā)現(xiàn)p0分區(qū)已被刪除,且2016年的日志全部被清除了

歸檔分區(qū)歷史數(shù)據(jù)

我們可能有另一種需求對數(shù)據(jù)進行歸檔

Mysql版本>=5.7,歸檔分區(qū)歷史數(shù)據(jù)非常方便,提供了一個交換分區(qū)的方法

分區(qū)數(shù)據(jù)歸檔遷移條件:

  • MySQL>=5.7
  • 結(jié)構(gòu)相同
  • 歸檔到的數(shù)據(jù)表一定要是非分區(qū)表
  • 非臨時表;不能有外鍵約束
  • 歸檔引擎要是:archive

建表并交換分區(qū)

CREATE TABLE `arch_customer_login_log` ( `customer_id` INT unsigned NOT NULL COMMENT '登錄用戶ID', `login_time` DATETIME NOT NULL COMMENT '用戶登錄時間', `login_ip` INT unsigned NOT NULL COMMENT '登錄IP', `login_type` TINYINT NOT NULL COMMENT '登錄類型:0未成功 1成功') ENGINE=InnoDB ;ALTER TABLE customer_login_log  exchange PARTITION p1 WITH TABLE arch_customer_login_log;

MySQL,分區(qū)表

MySQL,分區(qū)表

MySQL,分區(qū)表

可以發(fā)現(xiàn),原customer_login_log表中的2017年的數(shù)據(jù)(p1分區(qū)中的數(shù)據(jù))已轉(zhuǎn)移到了arch_customer_login_log表中,但是p1分區(qū)未刪除,只是數(shù)據(jù)轉(zhuǎn)移了,所以我們還需要執(zhí)行DROP命令刪除分區(qū),以免有數(shù)據(jù)插入其中

將歸檔數(shù)據(jù)的存儲引擎改為歸檔引擎

最后我們將歸檔數(shù)據(jù)的存儲引擎改為歸檔引擎,命令為

ALTER TABLE customer_login_log ENGINE=ARCHIVE;

使用歸檔引擎的好處是:它比Innodb所占用的空間更少,但是歸檔引擎只能進行查詢操作,不能進行寫操作

4. 使用分區(qū)表的主要事項

  • 結(jié)合業(yè)務(wù)場景選擇分區(qū)鍵,避免跨分區(qū)查詢
  • 對分區(qū)表進行查詢最好在WHERE從句中包含分區(qū)鍵
  • 具有主鍵或唯一索引的表,主鍵或唯一索引必須是分區(qū)鍵的一部分(這也是為什么我們上面分區(qū)時去掉了主鍵登錄日志id(login_id)的原因,不然就無法按照上面的按年份進行分區(qū),所以分區(qū)表其實更適合在MyISAM引擎中)

關(guān)于MyISAM和Innodb的索引區(qū)別

1.關(guān)于自動增長

myisam引擎的自動增長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以根據(jù)前面幾列進行排序后遞增。

innodb引擎的自動增長咧必須是索引,如果是組合索引也必須是組合索引的第一列。

2.關(guān)于主鍵

myisam允許沒有任何索引和主鍵的表存在,

myisam的索引都是保存行的地址。

innodb引擎如果沒有設(shè)定主鍵或者非空唯一索引,就會自動生成一個6字節(jié)的主鍵(用戶不可見)

innodb的數(shù)據(jù)是主索引的一部分,附加索引保存的是主索引的值。

3.關(guān)于count()函數(shù)

myisam保存有表的總行數(shù),如果select count(*) from table;會直接取出出該值

innodb沒有保存表的總行數(shù),如果使用select count(*) from table;就會遍歷整個表,消耗相當(dāng)大,但是在加了wehre 條件后,myisam和innodb處理的方式都一樣。

4.全文索引

myisam支持 FULLTEXT類型的全文索引

innodb不支持FULLTEXT類型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。(sphinx 是一個開源軟件,提供多種語言的API接口,可以優(yōu)化mysql的各種查詢)

5.delete from table

使用這條命令時,innodb不會從新建立表,而是一條一條的刪除數(shù)據(jù),在innodb上如果要清空保存有大量數(shù)據(jù)的表,最 好不要使用這個命令。(推薦使用truncate table,不過需要用戶有drop此表的權(quán)限)

6.索引保存位置

myisam的索引以表名+.MYI文件分別保存。

innodb的索引和數(shù)據(jù)一起保存在表空間里。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲男人的天堂在线视频| 欧美熟妇一区二区| 精品一区二区在线免费观看| 久久网站热最新地址| 一级黄色免费片| 成人免费一区二区三区在线观看| 日本一区二区三区久久| 亚洲韩国一区二区三区| 久久久无码精品亚洲国产| 日本视频中文字幕一区二区三区| 日韩电影在线观看中文字幕| 中文字幕在线视频一区二区| 精品一区二区三区国产| 日韩欧美色电影| 日日狠狠久久偷偷四色综合免费| 午夜精品一区二区三区在线播放| 亚洲中午字幕| 99精品热视频只有精品10| 国产欧美在线一区二区| 一区二区三区在线视频观看| 成人精品视频在线播放| 午夜精品一区二区三| av动漫在线免费观看| 五月天婷婷综合| 欧美久久久一区| 红桃视频在线观看一区二区| 高清日韩中文字幕| 日韩av片子| 久久久精品国产**网站| 欧美群妇大交群的观看方式| 日韩欧美精品在线不卡| 天堂网av在线播放| 麻豆国产精品视频| 国产精品久久一区主播| a在线观看网站| 私人影视中文字幕| 日韩伦理视频| 麻豆tv在线观看| 中文字幕在线第一页| 在线免费福利| 91麻豆精品在线| 色妞在线综合亚洲欧美| 在线观看免费黄色| 97久久久久久久| 大奶在线精品| 另类视频在线| 在线毛片网站| 97久久精品人人澡人人爽| 日韩av片网站| 亚洲熟妇无码另类久久久| 91香蕉视频污在线观看| 先锋影音男人站你懂得| 欧美色倩网站大全免费| 日韩福利视频一区| 一区二区三区入口| 伊人久久大香线蕉综合影院首页| 九色精品国产蝌蚪| 精品无码国产污污污免费网站| 一级视频在线观看| 综合国产在线观看| 欧美午夜片在线免费观看| 热久久一区二区| 精品久久久久人成| 91人人澡人人爽人人精品| 免费又黄又爽又色的视频| 日本 欧美 国产| 插菊花综合1| 亚洲国产成人自拍| 狠狠色香婷婷久久亚洲精品| 午夜av中文字幕| 欧美激情91| 亚洲区一区二区| 九色综合婷婷综合| 国产欧美日本一区视频| 少妇一级黄色片| 亚洲精品乱码久久久久久久久| 国产99在线播放| 国产天堂视频在线观看| 久草福利视频在线| 久久av老司机精品网站导航| 91视频国产资源| 99久久亚洲精品日本无码| 99免费观看视频| 国产肥老妇视频| 亚洲精品综合在线观看| 男女小视频在线观看| 亚洲精品卡一卡二| 日产欧产va高清| 亚洲成人激情社区| 91黄色免费视频| 免费观看性欧美大片无片| 国产免费av一区二区三区| 中文字幕免费一区二区| se在线电影| 国产精品亚洲欧美日韩一区在线| 亚洲91av| 香蕉国产在线| 亚洲综合大片69999| 日本精品一区二区三区四区的功能| japanese国产在线观看| 中文字幕中文字幕精品| 天天干天天色天天干| 在线视频中文亚洲| 外国成人毛片| 国产精品一区二区av| 国产精品视频一二三四区| 91麻豆福利精品推荐| 免费看污黄网站在线观看| 国产伦精品一区二区三区在线| 国产精品免费小视频| 国产视频中文字幕| 久久国产尿小便嘘嘘| 国产伦精品一区二区三区照片91| 久久先锋影音| 色综合久久中文字幕综合网| 特级丰满少妇一级aaaa爱毛片| www.超碰在线观看| xxxxx中文字幕| 欧美日韩成人在线| 国产欧美视频一区| 欧美 亚欧 日韩视频在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 天天影视综合| 成人av一区二区三区在线观看| 成人黄色777网| 欧美一级裸体视频| 成人黄色在线| 久久亚洲精品人成综合网| 国产福利一区二区在线精品| 国产精品亚洲一区| 中国a一片一级一片| 美女啪啪无遮挡免费久久网站| 亚洲美女屁股眼交| 国产福利在线观看| 亚洲精品激情视频| 99久久免费精品| 男人的天堂av社区在线| 国产精品www994| 色噜噜噜噜噜噜| 麻豆一区二区在线观看| 亚洲一二三四区不卡| 91av成人在线| 亚洲性生活视频| 免费精品99久久国产综合精品| 久草在线视频福利| 亚洲人成电影在线播放| 99爱视频在线| 国产区视频在线播放| 人妻一区二区视频| 国产97在线 | 亚洲| 日韩手机在线视频| www网站在线观看| 国产综合色激情| 免费看毛片的网址| 91麻豆国产福利在线观看| 日韩中文在线中文网在线观看| 搡老熟女老女人一区二区| 欧美在线视频观看| 国产无遮挡呻吟娇喘视频| 日韩av在线综合| 98精品在线视频| 日本少妇一区二区三区| 色婷婷综合网站| 紧缚捆绑精品一区二区| 国产成人免费视频网站视频社区| 老师让我她我爽了好久视频| 亚洲少妇久久久| 日韩 欧美 中文| 国产美女av| 亚洲国产精品一区| 91精品国产一区二区三区| 性感美女激情视频在线观看| 亚洲欧美国产毛片在线| 在线观看国产一区二区| 黑人巨大精品欧美一区| 国产深喉视频一区二区| 久久影院午夜精品| 精品无码一区二区三区的天堂| 欧美另类亚洲| 亚洲av无码国产综合专区| 18岁成人毛片| 国产精品99精品久久免费| 国产精品亚洲专一区二区三区| 久久成人在线观看| 精品一区二区三区五区六区七区| 韩国xxxx做受gayxxxx| 91免费黄视频| www.xx日本| 久久国产精品72免费观看| 欧美成人观看免费全部完小说| 欧美一级免费视频| 9色porny| 国产免播放器视频| 日本成人黄色片| 2021国产在线| 欧美天堂在线视频| 九九热线有精品视频99| 国产精品美女久久久久久久久久久| 奇米亚洲午夜久久精品| 欧美高清在线精品一区| 国产真实乱偷精品视频| 免费观看成人在线视频| 思思久久99热只有频精品66| 91成人超碰| 欧美在线观看黄| 国产精品久久久久久久久快鸭| 亚洲精品欧美日韩专区| 视频一区中文字幕| 国产在线拍揄自揄拍视频| 亚洲精品**不卡在线播he| 欧美黄色免费网址| 久久久久88色偷偷| 国产午夜精品无码一区二区| 久久国产精品久久w女人spa| 国产精品xxxxxx| 日韩成人av在线| 一区高清视频| 久久久综合精品| 色伦专区97中文字幕| 日韩专区在线| 女人抽搐喷水高潮国产精品| 菠萝蜜视频网址| 999av视频| 亚洲第一精品久久忘忧草社区| 黄频免费在线观看| 日韩亚洲不卡在线| 日本在线精品视频| 九九九久久久| 国产精品一级片| 欧美美女喷水视频| 日本激情视频在线播放| 成年人视频在线| 麻豆精品视频在线原创| 大奶在线精品| 色欧美88888久久久久久影院| 亚洲午夜久久久| 青青操在线视频| 久久久一本精品| 国产精品情趣视频| 国内精品美女av在线播放| 亚洲天堂中文字幕在线观看| 黄污网站在线观看| 精品国产一区二区三区久久狼黑人| 国产ts在线播放| 91caoporn在线| 精品无码人妻一区二区三| 久久精品久久精品久久| 男男gaygays亚洲| 欧美一区二区三区在| 182tv在线播放| 国产3p露脸普通话对白| 91精品福利视频| 在线视频综合导航| 亚洲午夜视频| 51ⅴ精品国产91久久久久久| 亚洲人成网站在线播| 日韩视频一区二区三区| 91农村精品一区二区在线| 伊是香蕉大人久久| 88av在线| 欧美日韩国产免费一区二区三区| 久久最新网址| 李宗瑞91在线正在播放| 91九色porny在线| 在线观看国产成人av片| 色先锋av男人资源先锋影院| 久久久久久久久久久久久9999| 最近更新的2019中文字幕| 高清日韩中文字幕| 亚洲天堂中文字幕在线| 亚洲免费av网| 欧洲av一区| av一区二区三区在线观看| 成人午夜视频在线| 亚洲精品免费在线观看视频| 久久久久久久久中文字幕| 欧美videos极品另类| 亚洲精品成人久久久| 蜜桃传媒在线| 污片在线免费观看| 三上悠亚在线资源| 久久久国产精品一区二区中文| 亚洲成a人片77777精品| 国产精品在线| 亚洲一区二区三区三| 亚洲成人电视网| 老师让我她我爽了好久视频| 国产激情视频在线观看| 亚洲综合五月天婷婷丁香| 日韩电影免费在线观看| 中国1级黄色片| 久久久久久美女| 日韩一区二区视频在线| 99er在线视频| 国产在线免费观看| 成年人网站免费看| 99久久伊人久久99| 国产一区二区三区四区老人| 伊人青青综合网站| 625成人欧美午夜电影| 亚洲大全视频| 小草在线视频免费播放| 成人黄色在线观看视频| 青青操在线观看视频| 亚洲一区二区三区四区视频| 精品久久久久亚洲| 久久精品日韩精品| 精品久久中文| 欧美一级专区免费大片| 一区二区三区四区中文字幕| 国内精品久久久久久影院8f| 丁香婷婷综合激情| 羞羞的视频在线观看| 精品肉丝脚一区二区三区| 精品国语对白精品自拍视| 宅男噜噜99国产精品观看免费| 中文字幕免费一区二区| 国产精品夜间视频香蕉| 欧美日韩亚洲国内综合网| 欧美午夜一区二区三区免费大片| 欧美 日本 亚洲| 嫩草视频在线观看| 色免费在线观看| 日本va欧美va欧美va精品| av不卡一区二区三区| 欧美又粗又长又爽做受| 亚洲av无码国产精品麻豆天美| 日韩免费特黄一二三区|