MySQL臨時表的優化方案

2021-09-23 19:33:47 字數 965 閱讀 1517

mysql 是全球最受歡迎的開源資料庫,作為開源軟體組合 lamp(linux + apache + mysql + perl/php/python)中的重要一環,廣泛應用於各類應用。web2.0 時代,風靡全網的社群論壇軟體系統 discuz 和部落格平台 wordpress 均基於 mysql 實現底層架構。web3.0 時代,阿里巴巴、facebook、google 等大型網際網路公司都採用更為靈活的 mysql 構建了成熟的大規模資料庫集群。阿里雲資料庫 mysql 版基於 alibaba 的 mysql 原始碼分支,經過雙 11 高併發、大資料量的考驗,擁有優良的效能和吞吐量。除此之外,阿里雲資料庫 mysql 版還擁有經過優化的讀寫分離、資料壓縮、智慧型調優等高階功能。

在雲資料庫rds for mysql存在臨時表的概念。包含「記憶體臨時表」和「磁碟臨時表」兩種,其中記憶體臨時表可以在控制台上通過tmp_table_size來設定其大小,通過這個設定可以將臨時結果儲存在記憶體中以供呼叫。當session生成的臨時內容超過了記憶體臨時表的配額後就會將記憶體臨時表的資料轉存到磁碟臨時表。磁碟臨時表由於需要通過磁碟物理檔案來存放,會導致sql的執行效率降低,因此需要盡量去避免這種現象的發生。

而下面的這些使用場景一定會使用到臨時表:

1) 表包含text或者blob列;

2) group by 或者 distinct 子句中包含長度大於512位元組的列;

3) 使用union或者union all時,select子句中包含大於512位元組的列。

可使用explain檢視執行計畫,extra列看到using temporary就意味著使用了臨時表。

使用者可以通過以下方式來對其優化:

1) 對group by和order by的列進行優化,新增索引;

2) 將較大的text或者blob列拆分成多個較小的列;

3) 對大量的group by和order by語句做拆分;

4) 優化業務邏輯。

參考

mysql臨時表更新 MySql 臨時表

今天在專案中遇到乙個,當mysql的in語句中資料量很大時,建立乙個臨時表的例子。於是樓主整理了一下關於臨時表的知識,與大家分享一下 首先,臨時表只在當前連線可見,當關閉連線時,mysql會自動刪除表並釋放所有空間。因此在不同的連線中可以建立同名的臨時表,並且操作屬於本連線的臨時表。建立臨時表 cr...

mysql 臨時表 限制 Mysql臨時表

當你建立臨時表的時候,你可以使用temporary關鍵字。如 create temporary table tmp table name varchar 10 not null,passwd char 6 not null 或create temporary table if not exists ...

mysql 臨時表 漢字 mysql的臨時表用法

delimiter use qgroupdata drop procedure if exists ex print bg kdd search create definer root procedure ex print bg kdd search where varchar 2000 查詢條件 ...