<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
sort buffer、記憶體臨時表和join buffer,這三個資料結構都是用來存放語句執行過程中的中間資料,以輔助SQL語句的執行的。其中,在排序的時候用到了sort buffer,在使用join語句的時候用到了join buffer。
而使用臨時表的時候,Explain
的Extra
欄位中具有Using temporary
標記。union、group by、distinct等等查詢都有可能使用到臨時表。
使用union的時候,就需要用到記憶體臨時表來進行去重。
union語句的執行流程為:
如果使用union all,則不需要去重,也就不需要臨時表了。在執行的時候,就依次執行子查詢,得到的結果直接作為結果集的一部分,發給使用者端。因此,除非確實需要伺服器消除重複的行,否則就一定要使用UNION ALL
,這一點很重要。如果沒有ALL關鍵字,MySQL會給臨時表加上DISTINCT
選項,這會導致對整個臨時我的資料做唯一性檢查。這樣做的代價非常高。如果不需要這些檢查,那麼甚至都不需要臨時表。
另外,避免對於union之後的結果集進行操作,也能避免臨時表的使用,通常需要手工地將MHERE、LIMIT、ORDER BY等子句“下推”到UNION的各個子查詢中,以便優化器可以充分利用這些條件進行優化,使得union的結果就是最終的結果(例如,直接將這些子句冗餘地寫一份到各個子查詢)。
另外一個使用臨時表的例子是group by,group by還具有隱藏的排序的語句,即在對某些欄位進行分組之後,將資料再根據這些欄位進行排序,最後返回排序後的結果。
如下sql:
select id%10 as m, count(*) as c from t1 group by m;
這個語句的執行流程是這樣的:
此時,Explain的Extra欄位中具有Using temporary; Using filesort
標記。
如果並不需要對結果進行排序,那可以在SQL語句末尾增加order by null
,即:
select id%10 as m, count(*) as c from t1 group by m order by null;
這樣就跳過了最後排序的階段,直接從臨時表中取資料返回。
記憶體臨時表的大小是有限制的,引數tmp_table_size
就是控制這個記憶體大小的,預設是16M
。如果要處理的資料超過了最大大小,那麼MySQL會把記憶體臨時錶轉成磁碟臨時表,而磁碟臨時表預設使用的引擎是InnoDB,因此會按主鍵順序儲存資料,所以最終取出的結果還是預設有序的。
對於Group By的臨時表的優化,同樣是使用索引:因為如果進行Group By欄位是有序的,那麼在處理時(比如計算每組數量、個數等等),因為跟著的欄位有索引,那麼相同的值肯定是在一起的、連續的,所以直接順序掃描輸入的資料即可,不需要臨時表,也不需要再額外排序。
總結:
如果執行邏輯需要用到二維表特性,就會優先考慮使用臨時表。比如我們的例子中,union需要用到唯一索引約束, group by還需要用到另外一個欄位來存累積計數。
另外,對於distinct查詢來說,如果無法使用索引,則也會使用到臨時表,也會進行分組,它和group by的區別是不需要排序。
到此這篇關於MySQL 臨時表的原理以及優化方法的文章就介紹到這了,更多相關MySQL 臨時表 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45