成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Mysql臨時表及分區(qū)表區(qū)別詳解

瀏覽:207日期:2023-10-11 15:35:02

臨時表與內(nèi)存表

內(nèi)存表,指的是使用Memory引擎的表,建表語法是create table … engine=memory。這種 表的數(shù)據(jù)都保存在內(nèi)存里,系統(tǒng)重啟的時候會被清空,但是表結(jié)構(gòu)還在。除了這兩個特性看 上去比較“奇怪”外,從其他的特征上看,它就是一個正常的表

臨時表,可以使用各種引擎類型 。如果是使用InnoDB引擎或者MyISAM引擎的臨時表,寫 數(shù)據(jù)的時候是寫到磁盤上的。當然,臨時表也可以使用Memory引擎。

臨時表特性

Mysql臨時表及分區(qū)表區(qū)別詳解

建表語法是create temporary table …。 一個臨時表只能被創(chuàng)建它的session訪問,對其他線程不可見。所以,圖中session A創(chuàng)建的 臨時表t,對于session B就是不可見的。 臨時表可以與普通表同名。 session A內(nèi)有同名的臨時表和普通表的時候,show create語句,以及增刪改查語句訪問的是臨時表。 show tables命令不顯示臨時表。

由于臨時表只能被創(chuàng)建它的session訪問,所以在這個session結(jié)束的時候,會自動刪除臨時表。 也正是由于這個特性,臨時表就特別適合join優(yōu)化這種場景。

create temporary table temp_t like t1;alter table temp_t add index(b);insert into temp_t select * from t2 where b>=1 and b<=2000;select * from t1 join temp_t on (t1.b=temp_t.b);

不同session的臨時表是可以重名的,如果有多個session同時執(zhí)行join優(yōu)化,不需要擔心表名重復導致建表失敗的問題。不需要擔心數(shù)據(jù)刪除問題。如果使用普通表,在流程執(zhí)行過程中客戶端發(fā)生了異常斷開,或者數(shù)據(jù)庫發(fā)生異常重啟,還需要專門來清理中間過程中生成的數(shù)據(jù)表。而臨時表由于會自動回收,所以不需要這個額外的操作。臨時表的應(yīng)用

分庫分表系統(tǒng)的跨庫查詢

一般分庫分表的場景,就是要把一個邏輯上的大表分散到不同的數(shù)據(jù)庫實例上。比如。將一個大 表ht,按照字段f,拆分成1024個分表,然后分布到32個數(shù)據(jù)庫實例上。

Mysql臨時表及分區(qū)表區(qū)別詳解

分區(qū)key的選擇是以“減少跨庫和跨表查詢”為依據(jù)的。如果大部分的語句都會包 含f的等值條件,那么就要用f做分區(qū)鍵。這樣,在proxy這一層解析完SQL語句以后,就能確定將這條語句路由到哪個分表做查詢。 比如

select v from ht where f=N;

這時,我們就可以通過分表規(guī)則(比如,N%1024)來確認需要的數(shù)據(jù)被放在了哪個分表上。這種語句只需要訪問一個分表,是分庫分表方案最歡迎的語句形式了。

但是,如果這個表上還有另外一個索引k,并且查詢語句是這樣的:

select v from ht where k >= M order by t_modified desc limit 100;

這時候,由于查詢條件里面沒有用到分區(qū)字段f,只能到所有的分區(qū)中去查找滿足條件的所有 行,然后統(tǒng)一做order by 的操作。這種情況下,有兩種比較常用的思路:

在proxy層的進程代碼中實現(xiàn)排序,對proxy端的壓力比較大,尤其是很容易出現(xiàn)內(nèi)存不夠用和CPU瓶頸的問題。

把各個分庫拿到的數(shù)據(jù),匯總到一個MySQL實例的一個表中,然后在這個匯總實例上做邏輯操作。

在匯總庫上創(chuàng)建一個臨時表temp_ht,表里包含三個字段v、k、t_modifified;

在各個分庫上執(zhí)行

select v,k,t_modified from ht_x where k >= M order by t_modified desc limit 100;

把分庫執(zhí)行的結(jié)果插入到temp_ht表中;

執(zhí)行

select v from temp_ht order by t_modified desc limit 100;

為什么臨時表可以重名

create temporary table temp_t(id int primary key)engine=innodb;

執(zhí)行這個語句的時候,MySQL要給這個InnoDB表創(chuàng)建一個frm文件保存表結(jié)構(gòu)定義,還要有地方保存表數(shù)據(jù)。

這個frm文件放在臨時文件目錄下,文件名的后綴是.frm,前綴是“#sql{進程id}_{線程id}_序列 號”。你可以使用select @@tmpdir命令,來顯示實例的臨時文件目錄。

Mysql臨時表及分區(qū)表區(qū)別詳解

這個進程的進程號是1234,session A的線程id是4,session B的線程id是5。所以session A和session B創(chuàng)建的臨時表,在磁盤上的文件不會重名

MySQL維護數(shù)據(jù)表,除了物理上要有文件外,內(nèi)存里面也有一套機制區(qū)別不同的表,每個表都對應(yīng)一個table_def_key。 對于臨時表,table_def_key在“庫名+表名”基礎(chǔ)上,又加入了“server_id+thread_id”。

也就是說,session A和sessionB創(chuàng)建的兩個臨時表t1,它們的table_def_key不同,磁盤文件名 也不同,因此可以并存。

分區(qū)表的引擎層行為

ATETABLE`t`(`ftime`datetimeNOTNULL,`c`int(11)DEFAULTNULL,KEY(`ftime`))ENGINE=InnoDBDEFAULTCHARSET=latin1PARTITIONBYRANGE(YEAR(ftime))Û ॔ګդᎱB (PARTITIONp_2017VALUESLESSTHAN(2017)ENGINE=InnoDB, PARTITIONp_2018VALUESLESSTHAN(2018)ENGINE=InnoDB, PARTITIONp_2019VALUESLESSTHAN(2019)ENGINE=InnoDB, PARTITIONp_othersVALUESLESSTHANMAXVALUEENGINE=InnoDB); insertintotvalues(’2017-4-1’,1),(’2018-4-1’,1);

Mysql臨時表及分區(qū)表區(qū)別詳解

初始化表的時候,只插入了兩行數(shù)據(jù),sessionA的select語句對ftime這兩個記錄之間的間隙加了鎖,間隙和加鎖狀態(tài)如圖:

Mysql臨時表及分區(qū)表區(qū)別詳解

也就是說,2017-4-1和2018-4-1這兩個記錄之間的間隙會被鎖住,那么sessionB的兩條插入語句都應(yīng)該進入鎖等待狀態(tài)。但是從效果上看,第一個insert語句是可以執(zhí)行成功的,因為對于引擎來說,p2018和p2019是不同的表,2017的下一個記錄不是2018-4-1而是p2018中的supremum,所以在t1時刻索引如圖:

Mysql臨時表及分區(qū)表區(qū)別詳解

由于分區(qū)表的規(guī)則,sessionA只操作了p2018,sessionB要插入2018-2-1是可以的但要寫入2017-12-1要等待sessionA的間隙鎖。

對于MYISAM引擎:

Mysql臨時表及分區(qū)表區(qū)別詳解

因為在sessionA中,sleep了100秒,由于myisam只支持表鎖,所以這條update會鎖住整個表t的讀,但是結(jié)果是,B的第一條語句是可以執(zhí)行的,第二條語句才進入鎖等待狀態(tài)。

這是myisam表鎖只在引擎層實現(xiàn)的,sessionA加的表鎖,是所在p2018上,因此只會堵住分區(qū)上執(zhí)行的查詢,落到其他分區(qū)的查詢不受影響。這樣看來,分區(qū)表還不錯,為什么不用呢,我們使用分區(qū)表的一個原因就是單表過大,那么不使用分區(qū)表,就要使用手動分表的方式。

手動分表需要創(chuàng)建t_2017,t_2018,t_2019,也就是找到需要更新的所有分表,依次執(zhí)行,這和分區(qū)表無實質(zhì)的差別,兩者一個由serverceng決定使用哪個分區(qū),一個由應(yīng)用層代碼決定使用哪個分表,因此,從引擎層看無實際差別。其實主要區(qū)別是在server層:打開表行為。

分區(qū)策略

每當?shù)谝淮卧L問一個分區(qū)表時,mysql需要把所有分區(qū)都訪問一遍:如果分區(qū)很多,比如查過了1000個,mysql啟動的時候,open_files_limit默認為1024,那么就會在訪問表的時候,由于打開了所有文件,超過了上限而報錯。

mysiam使用的分區(qū)策略成為通用分區(qū)策略,每次訪問分區(qū)都是有server層控制。有比較嚴重的性能問題。

innodb引擎引入了本地分區(qū)策略,是在innodb內(nèi)部自己管理打開分區(qū)的行為。

分區(qū)表的server層行為

從server層看,一個分區(qū)表就是一個表。

Mysql臨時表及分區(qū)表區(qū)別詳解

雖然B只操作2017分區(qū),但是由于A持有整個表t的mdl鎖,導致了B的alter語句被堵住。如果是使用普通分表,不會跟另外一個分表上的查詢語句出現(xiàn)MDL沖突。

小結(jié):

mysql在第一次打開分區(qū)表的時候,需要訪問所有分區(qū) 在server層,認為這是同一張表,因此所有分區(qū)公用MDL鎖 在引擎層,認為這是不同的表,因此在MDL鎖之后,會根據(jù)分區(qū)表規(guī)則,只訪問必要的分區(qū)。

分區(qū)表應(yīng)用場景

分區(qū)表的優(yōu)勢是對業(yè)務(wù)透明,相對于用戶分表來說,使用分區(qū)表的業(yè)務(wù)代碼更簡潔,分區(qū)表可以很方便的清理歷史數(shù)據(jù)。

alter table t drop partition 操作是刪除分區(qū)文件,效果跟drop類似,與delete相比,優(yōu)勢是速度快,對系統(tǒng)影響小。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美 日韩 国产一区二区在线视频 | 亚洲资源av| 玖玖在线精品| 国产日韩欧美不卡| 久久99久久久欧美国产| 国产精品国产一区二区| 欧美日韩和欧美的一区二区| 中文字幕亚洲区| 韩国精品主播一区二区在线观看 | xfplay精品久久| 99精品视频在线播放观看| 欧美精品一区二区三区蜜桃| 日产欧产美韩系列久久99| 亚洲国产精品久久人人爱| av在线一区二区| 麻豆九一精品爱看视频在线观看免费| 精品日产卡一卡二卡麻豆| 五月天婷婷综合| 一区久久精品| 久久色在线观看| 日日摸夜夜添夜夜添精品视频 | 国产一区高清在线| 亚洲一区久久| 国产精品久久久久久久久久久免费看 | 亚洲mv大片欧洲mv大片精品| 国产乱一区二区| 久久一日本道色综合久久| 国产精品色呦呦| 成人午夜在线免费| 欧美专区亚洲专区| 亚洲二区在线视频| 黄色国产精品| 久久婷婷色综合| 国产一区三区三区| 色婷婷综合久久久久中文一区二区 | 亚洲成人www| 欧美伊人久久| 欧美一级免费大片| 免费成人结看片| 国产亚洲精品v| 亚洲天堂a在线| 欧美剧情电影在线观看完整版免费励志电影 | 欧美sm重口味系列视频在线观看| 久久综合九色综合欧美亚洲| 欧美在线视频二区| 国产日产欧美一区二区视频| 国产一区二区三区无遮挡 | 在线观看国产日韩| 国产一区二区电影| 日韩一区二区免费高清| 91在线播放网址| 亚洲视频综合在线| 99久久精品国产精品久久| 国产欧美一二三区| 亚洲国产精品日韩| 亚洲国产精品精华液网站| 欧美在线三级电影| 丁香一区二区三区| 国产日韩精品久久久| 在线视频精品| 紧缚奴在线一区二区三区| 精品国产一二三| 亚洲高清资源| 美女mm1313爽爽久久久蜜臀| 精品少妇一区二区三区免费观看| 国产精品a久久久久| 亚洲成人精品在线观看| 欧美在线影院一区二区| 99久久久无码国产精品| 成人欧美一区二区三区小说| 久久资源在线| av电影在线观看一区| 亚洲色大成网站www久久九九| 色噜噜久久综合| youjizz国产精品| 亚洲伦理在线精品| 欧美日韩在线播放| 91麻豆蜜桃一区二区三区| 夜夜嗨av一区二区三区四季av| 欧美日韩一区二区三区免费看| 欧美成人蜜桃| 亚洲6080在线| 精品国偷自产国产一区| 亚洲少妇一区| 国产91精品免费| 国产精品蜜臀在线观看| 久久亚洲综合网| 国产成人免费视频一区| 亚洲日本一区二区三区| 欧美日韩三级在线| 亚洲无吗在线| 久久精品免费观看| 国产精品嫩草影院com| 在线观看亚洲精品| 国模吧视频一区| 久久精品国产久精国产| 国产精品免费网站在线观看| 色狠狠av一区二区三区| 91在线视频免费观看| 亚洲一二三四在线| 日韩视频免费直播| 亚洲视频狠狠| 国产美女精品一区二区三区| 亚洲乱码中文字幕综合| 欧美美女一区二区在线观看| 欧美视频福利| 国产在线乱码一区二区三区| 亚洲欧美日本韩国| 欧美一级片免费看| 亚洲一区亚洲| 91在线观看下载| 日韩国产在线一| 2019国产精品| 日本高清无吗v一区| 欧美另类视频在线| 久久er精品视频| 亚洲人成小说网站色在线| 欧美一级二级三级乱码| 中文高清一区| 欧美成人中文| 国产在线视视频有精品| 亚洲国产成人91porn| 久久久另类综合| 欧美性受极品xxxx喷水| 日韩午夜激情| 99久久夜色精品国产网站| 日韩国产欧美在线视频| 国产精品美女久久久久高潮| 日韩女优av电影在线观看| 色噜噜狠狠成人中文综合| 欧美精品一卡| 国产精品综合在线视频| 一区二区三区四区蜜桃| 久久夜色精品国产噜噜av| 欧美三级日韩三级| 欧美综合二区| 亚洲国产一区二区在线| 97久久超碰精品国产| 九色|91porny| 性做久久久久久免费观看| 国产精品嫩草影院av蜜臀| 26uuu亚洲综合色欧美| 欧美久久一二区| 久久一区亚洲| 亚洲一区三区电影在线观看| 欧美日韩精品免费看 | 国产不卡高清在线观看视频| 蜜臀av亚洲一区中文字幕| 一级中文字幕一区二区| 国产精品理论片在线观看| 国产亚洲精品bt天堂精选| 欧美一区二区三区喷汁尤物| 欧美综合一区二区| 久久国产一区二区| 亚洲人体偷拍| 国产综合色产| 欧美影视一区| 91在线观看视频| 国产91清纯白嫩初高中在线观看| 久久99国产精品麻豆| 天堂午夜影视日韩欧美一区二区| 亚洲六月丁香色婷婷综合久久| 国产精品亲子乱子伦xxxx裸| 久久―日本道色综合久久| 日韩女同互慰一区二区| 欧美一级一区二区| 欧美一卡二卡在线| 欧美欧美欧美欧美| 欧美综合一区二区| 在线视频一区二区免费| 日本精品视频一区二区三区| 久久综合伊人77777麻豆| 色嗨嗨av一区二区三区| 美女精品在线| 午夜亚洲视频| 国产精品日韩高清| 亚洲在线不卡| 看欧美日韩国产| 欧美性高清videossexo| 欧美日韩精品一区二区天天拍小说| 欧美日韩国产一级片| 欧美一区二区高清| 欧美大片日本大片免费观看| 欧美大胆人体bbbb| 精品国产三级电影在线观看| 精品日韩一区二区三区| 欧美精品一区二区三| 欧美精品一区二区三区蜜桃| 久久久欧美精品sm网站| 欧美激情在线观看视频免费| 日韩一区中文字幕| 玉米视频成人免费看| 亚洲国产欧美一区二区三区丁香婷| 亚洲综合偷拍欧美一区色| 亚洲国产成人av网| 久久精品99久久久| 国产99久久久久久免费看农村| 成人a免费在线看| 欧美久久99| 99精品国产高清一区二区|