最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql臨時表的具體使用

 更新時間:2026年03月25日 10:05:32   作者:劍之所向  
本文主要介紹了主要介紹了Mysql臨時表的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

MySQL中哪些具體場景會觸發(fā)臨時表的創(chuàng)建,這是優(yōu)化數(shù)據(jù)庫性能的關(guān)鍵問題——臨時表如果頻繁落到磁盤(而非內(nèi)存),會顯著消耗IO和CPU資源。

一、臨時表的核心分類(先理清概念)

首先要明確:MySQL的臨時表分兩種,性能影響天差地別:

  1. 內(nèi)存臨時表:默認(rèn)使用TempTable引擎(MySQL 8.0+)或MEMORY引擎,基于內(nèi)存創(chuàng)建,速度快,受tmp_table_size/temptable_max_ram限制;
  2. 磁盤臨時表:內(nèi)存臨時表超出閾值后,自動轉(zhuǎn)為InnoDB/MyISAM引擎的磁盤臨時表,IO開銷大,是優(yōu)化重點。

所有場景最終都是先嘗試創(chuàng)建內(nèi)存臨時表,觸發(fā)特定條件后才會落到磁盤。

二、觸發(fā)臨時表的核心業(yè)務(wù)場景(附案例+原因)

以下是最常見的觸發(fā)場景,按出現(xiàn)頻率排序:

1. 聚合查詢(GROUP BY / DISTINCT / HAVING)

這是最常見的場景,幾乎所有復(fù)雜聚合都會創(chuàng)建臨時表。

  • 觸發(fā)原因:MySQL需要先把符合條件的數(shù)據(jù)匯總到臨時表,再做分組/去重計算;
  • 典型案例
    -- GROUP BY無索引,觸發(fā)臨時表
    SELECT category, COUNT(*) FROM goods WHERE price > 100 GROUP BY category;
    -- DISTINCT去重,觸發(fā)臨時表
    SELECT DISTINCT user_id FROM order WHERE create_time > '2026-01-01';
    -- HAVING過濾聚合結(jié)果,依賴臨時表
    SELECT shop_id, SUM(amount) FROM order 
    GROUP BY shop_id HAVING SUM(amount) > 10000;
  • 關(guān)鍵補充:如果GROUP BY的字段有聯(lián)合索引(如(price, category)),MySQL可能通過索引直接排序聚合,避免臨時表。

2. 排序操作(ORDER BY)

當(dāng)排序無法通過索引完成時,必然創(chuàng)建臨時表。

  • 觸發(fā)原因:MySQL需要先把數(shù)據(jù)加載到臨時表,再執(zhí)行文件排序(filesort);
  • 典型案例
    -- 排序字段無索引,觸發(fā)臨時表+filesort
    SELECT id, name FROM user WHERE age > 20 ORDER BY register_time DESC;
    -- 多字段排序且無復(fù)合索引
    SELECT product_id, sales FROM order 
    WHERE order_date > '2026-01-01' 
    ORDER BY sales DESC, order_date ASC;
  • 關(guān)鍵補充:如果ORDER BY的字段包含在查詢的覆蓋索引中,可避免臨時表和filesort。

3. 子查詢/派生表(FROM子句中的子查詢)

FROM子句中的子查詢會被MySQL自動轉(zhuǎn)為臨時表(也稱“派生表”)。

  • 觸發(fā)原因:MySQL需要先執(zhí)行子查詢,將結(jié)果存入臨時表,再和外層表關(guān)聯(lián);
  • 典型案例
    -- FROM子句的子查詢,觸發(fā)臨時表
    SELECT a.user_id, b.order_count 
    FROM user a
    JOIN (
        SELECT user_id, COUNT(*) AS order_count 
        FROM order GROUP BY user_id
    ) b ON a.user_id = b.user_id;
  • 關(guān)鍵補充:MySQL 8.0+支持“派生表合并”優(yōu)化,部分場景可避免臨時表,但復(fù)雜子查詢?nèi)詴|發(fā)。

4. JOIN操作(多表關(guān)聯(lián))

特定JOIN場景會創(chuàng)建臨時表,尤其是關(guān)聯(lián)字段無索引或結(jié)果集需排序時。

  • 觸發(fā)原因
    • 小表驅(qū)動大表時,MySQL會將小表結(jié)果存入臨時表加速關(guān)聯(lián);
    • JOIN后需排序(如ORDER BY),臨時表用于存儲關(guān)聯(lián)結(jié)果;
  • 典型案例
    -- JOIN字段無索引,觸發(fā)臨時表
    SELECT a.name, b.order_no 
    FROM user a
    LEFT JOIN order b ON a.mobile = b.mobile  -- mobile無索引
    WHERE a.age < 30;
    -- JOIN后排序,必然觸發(fā)臨時表
    SELECT a.shop_id, b.goods_name 
    FROM shop a
    JOIN goods b ON a.shop_id = b.shop_id
    ORDER BY b.sales DESC;

5. UNION / UNION ALL(結(jié)果集合并)

  • UNION:會自動去重,必須創(chuàng)建臨時表存儲合并后的結(jié)果,再去重;
  • UNION ALL:僅合并結(jié)果集,默認(rèn)不創(chuàng)建臨時表,但如果加了ORDER BY,仍會觸發(fā);
  • 典型案例
    -- UNION去重,觸發(fā)臨時表
    SELECT id, name FROM user WHERE age < 20
    UNION
    SELECT id, name FROM user WHERE age > 40;
    -- UNION ALL+ORDER BY,觸發(fā)臨時表
    SELECT id, name FROM user WHERE age < 20
    UNION ALL
    SELECT id, name FROM user WHERE age > 40
    ORDER BY name;

6. 其他特殊場景

  • 使用臨時表函數(shù):如GROUP_CONCAT()、JSON_ARRAYAGG()等聚合函數(shù),結(jié)果集較大時觸發(fā);
  • 全文索引查詢:MATCH AGAINST的復(fù)雜全文檢索,可能創(chuàng)建臨時表存儲匹配結(jié)果;
  • 視圖查詢:復(fù)雜視圖(包含聚合、排序、子查詢)被調(diào)用時,會觸發(fā)臨時表;
  • EXPLAIN可驗證:執(zhí)行EXPLAIN查看計劃,若Extra列包含Using temporary,則表示觸發(fā)了臨時表。

三、磁盤臨時表的額外觸發(fā)條件

即使觸發(fā)了內(nèi)存臨時表,滿足以下條件會轉(zhuǎn)為磁盤臨時表,這是性能優(yōu)化的核心:

  1. 內(nèi)存臨時表大小超過tmp_table_size或temptable_max_ram(你服務(wù)器當(dāng)前設(shè)的4G,建議下調(diào)到2G);
  2. 查詢包含BLOB/TEXT大字段(內(nèi)存臨時表不支持這類字段,直接落磁盤);
  3. GROUP BY/ORDER BY的字段是字符串類型(且長度較長),內(nèi)存排序效率低,易觸發(fā)磁盤臨時表;
  4. 使用DISTINCT+ORDER BY組合,雙重消耗內(nèi)存,易超出閾值。

總結(jié)

核心觸發(fā)場景(重點記憶)

  1. 合類:GROUP BY/DISTINCT/HAVING是臨時表最主要的觸發(fā)源;
  2. 排序類:無索引的ORDER BY必然觸發(fā)臨時表+文件排序;
  3. 子查詢/合并類:FROM子句派生表、UNION(尤其帶去重/排序);
  4. 關(guān)聯(lián)類:無索引的多表JOIN,或JOIN后排序。

優(yōu)化關(guān)鍵

  1. 給聚合/排序/關(guān)聯(lián)字段建合適的索引(最有效,直接避免臨時表);
  2. 合理設(shè)置tmp_table_size(你服務(wù)器建議2G),避免內(nèi)存臨時表過早落磁盤;
  3. 用EXPLAIN排查Using temporary,優(yōu)先優(yōu)化高頻SQL;
  4. 避免SELECT *,減少臨時表的數(shù)據(jù)量,尤其你的服務(wù)器是4T硬盤,大結(jié)果集落磁盤會更慢。

到此這篇關(guān)于Mysql臨時表的具體使用的文章就介紹到這了,更多相關(guān)Mysql臨時表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 批量 kill mysql 中運行時間長的sql

    批量 kill mysql 中運行時間長的sql

    這篇文章主要介紹了批量 kill mysql 中運行時間長的sql,需要的朋友可以參考下
    2016-01-01
  • 常見數(shù)據(jù)庫中SQL分頁語法整理大全(附示例)

    常見數(shù)據(jù)庫中SQL分頁語法整理大全(附示例)

    數(shù)據(jù)庫分頁是數(shù)據(jù)庫管理系統(tǒng)中非常常見的一種操作,主要用于在大量數(shù)據(jù)中進行高效的瀏覽,提高用戶體驗,這篇文章主要介紹了常見數(shù)據(jù)庫中SQL分頁語法整理的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • MySQL主從復(fù)制斷開的常用修復(fù)方法

    MySQL主從復(fù)制斷開的常用修復(fù)方法

    這篇文章主要介紹了MySQL主從復(fù)制斷開的常用修復(fù)方法,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • 使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法

    使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法

    這篇文章主要介紹了使用phpMyAdmin批量修改Mysql數(shù)據(jù)表前綴的方法,需要的朋友可以參考下
    2015-09-09
  • mysql用戶管理操作實例分析

    mysql用戶管理操作實例分析

    這篇文章主要介紹了mysql用戶管理操作,結(jié)合實例形式分析了mysql用戶管理查看、創(chuàng)建、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • KubeSphere部署mysql的詳細(xì)步驟

    KubeSphere部署mysql的詳細(xì)步驟

    本文介紹了在KubeSphere中部署Mysql的詳細(xì)步驟,包括創(chuàng)建mysql配置、pvc掛載、工作負(fù)載、服務(wù),并測試數(shù)據(jù)庫連接,步驟詳盡,包括yaml配置和環(huán)境變量設(shè)置,特別強調(diào)了路徑一致性和外部訪問設(shè)置,還提到了使用NodePort模式解決自定義域名連接問題
    2024-10-10
  • MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程

    MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了MySQL中的事件調(diào)度基礎(chǔ)學(xué)習(xí)教程,本文介紹了對Event Scheduler的一些基本操作方法,需要的朋友可以參考下
    2015-11-11
  • Mysql表的內(nèi)聯(lián)和外聯(lián)區(qū)別案例解析

    Mysql表的內(nèi)聯(lián)和外聯(lián)區(qū)別案例解析

    文章總結(jié)了SQL中的表連接,包括內(nèi)連接和外連接,內(nèi)連接通過WHERE子句篩選笛卡兒積,而外連接分為左外連接和右外連接,左外連接確保左表的所有記錄都顯示,右外連接確保右表的所有記錄都顯示,文章通過語法案例和練習(xí)幫助理解這些連接類型,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 配置Mysql主從服務(wù)實現(xiàn)實例

    配置Mysql主從服務(wù)實現(xiàn)實例

    這篇文章主要介紹了配置Mysql主從服務(wù)實現(xiàn)實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • mysql入門之1小時學(xué)會MySQL基礎(chǔ)

    mysql入門之1小時學(xué)會MySQL基礎(chǔ)

    今天剛好看到了SYZ01的這篇mysql入門文章,感覺對于想學(xué)習(xí)mysql的朋友是個不錯的資料,腳本之家特分享一下,需要的朋友可以參考下
    2018-01-01

最新評論

浦江县| 沐川县| 福海县| 辽宁省| 佛学| 葵青区| 繁峙县| 灵川县| 旬邑县| 临夏市| 谢通门县| 肃南| 曲周县| 武清区| 垣曲县| 新乐市| 连平县| 遂平县| 平舆县| 富裕县| 沙河市| 郯城县| 白银市| 巫山县| 登封市| 黑山县| 甘肃省| 叙永县| 舒城县| 宣化县| 栖霞市| 图木舒克市| 安阳市| 卓资县| 元谋县| 耒阳市| 房山区| 五华县| 固安县| 西充县| 卓尼县|