亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談Mysql在什么情況下會使用內部臨時表

 更新時間:2021年10月26日 09:18:48   作者:我和寧拼啦  
內部臨時表是一種特殊輕量級的臨時表,本文主要介紹了Mysql在什么情況下會使用內部臨時表,具有一定的參考價值,感興趣的小伙伴們可以參考一下

union執(zhí)行

為了便于分析,使用一下sql來進行舉例

CREATE TABLE t1 ( id INT PRIMARY KEY, a INT, b INT, INDEX ( a ) );

delimiter ;;
CREATE PROCEDURE idata ( ) BEGIN
DECLARE
        i INT;
 SET i = 1;
 WHILE
   ( i <= 1000 ) DO
   INSERT INTO t1
  VALUES
   ( i, i, i );
  SET i = i + 1;
 END WHILE;
 END;;

delimiter ;
CALL idata ( );

然后我們執(zhí)行以下sql

(select 1000 as f) union (select id from t1 order by id desc limit 2);

這段sql的語義是,取兩個子查詢的的并集,并且去重

可以看到,第二行的key是primary,說明第二個子查詢使用索引id。第三行的Extra字段,表示在子查詢union的時候,使用了臨時表(Using temporary)。
這個語句的執(zhí)行流程是這樣的:
1)創(chuàng)建一個內存臨時表,這個臨時表只有一個整形字段f,并且f是主鍵字段
2)執(zhí)行第一個子查詢,將1000存在臨時表
3)執(zhí)行第二個子查詢,拿到第一行id=1000,并試圖插入到臨時表,但是由于1000這個值已經存在臨時表了,違法了唯一性約束,所以插入失敗,接著取到第二行數據999,插入臨時表成功
4)從臨時表中按行取出數據,返回結果,并刪除臨時表,結果中包含兩條數據就是1000和999
可以看到,臨時表起到了暫存數據的作用,而且存在唯一性約束,實現了union去重的語義

group by

另外一個常見的使用臨時表的例子就是group by,我們看一下以下sql

select id%10 as m, count(*) as c from t1 group by m;

這個語句就是根據t1表的數據,根據id%10進行分組,并按照m的結果排序后輸出

在Extra字段中,我們看到了三個信息:

1)Using index,表示這個語句使用了覆蓋索引,選擇了索引 a;
2)Using temporary,表示使用了臨時表;
3)Using filesort,表示需要排序;

這個語句的執(zhí)行流程是這樣的:

1)創(chuàng)建內存臨時表,表里有字段m和c,主鍵是m;
2)掃描表t1的索引a,依次取出葉子節(jié)點上面的id值,計算id%10的結果,記為x;

  • 如果臨時表沒有主鍵x,就插入一個記錄(x,1);
  • 如果表中有主鍵x的行,就將x這一行的c值加1;

3)遍歷完成之后,再根據字段m做排序,得到結果

內存臨時表的大小是有限制的,參數tmp_table_size就是控制這個內存大小的,默認是16M,如果內存臨時表大小達到了上線,這時候就會把內存臨時表轉成磁盤臨時表,磁盤臨時表的默認引擎是InnoDB,如果表的數據量很大,很可能查詢就會占用大量的磁盤空間

到此這篇關于淺談Mysql在什么情況下會使用內部臨時表的文章就介紹到這了,更多相關Mysql 內部臨時表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL?EXPLAIN執(zhí)行計劃解析

    MySQL?EXPLAIN執(zhí)行計劃解析

    本文主要介紹了MySQL?EXPLAIN執(zhí)行計劃解析,通過MySQL?EXPLAIN執(zhí)行計劃的各個字段的含義以及使用方式。感興趣的小伙伴可以參考一下
    2022-08-08
  • 詳解MySQL alter ignore 語法

    詳解MySQL alter ignore 語法

    這篇文章主要介紹了MySQL alter ignore 語法的相關資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • mysql中的delete,drop和truncate有什么區(qū)別

    mysql中的delete,drop和truncate有什么區(qū)別

    這篇文章主要介紹了mysql中的delete,drop和truncate有什么區(qū)別,三者的用法和使用場景又完全不同,接下來我們來看看具體的區(qū)別吧,希望對你的學習有所幫助
    2022-06-06
  • MySQL下載安裝、配置與使用教程詳細版(win7x64)

    MySQL下載安裝、配置與使用教程詳細版(win7x64)

    這篇文章主要為大家詳細介紹了MySQL下載安裝、配置與使用的具體操作教程,很詳細,感興趣的小伙伴們可以參考一下
    2016-05-05
  • asp采用ODBC接口訪問MySQL的方法

    asp采用ODBC接口訪問MySQL的方法

    asp采用ODBC接口訪問MySQL的方法...
    2007-07-07
  • Red?Hat?安裝MySQL?8.0與?Navicat的詳細過程

    Red?Hat?安裝MySQL?8.0與?Navicat的詳細過程

    這篇文章主要介紹了Red?Hat安裝MySQL8.0與Navicat,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • MySql索引和事務定義到使用全面涵蓋

    MySql索引和事務定義到使用全面涵蓋

    這篇文章主要介紹了MySQL數據庫索引事務,索引是為了加速對表中數據行的檢索而創(chuàng)建的一種分散的存儲結;事物是屬于計算機中一個很廣泛的概念,一般是指要做的或所做的事情,下面我們就一起進入文章了解具體內容吧
    2022-07-07
  • 在Linux系統(tǒng)安裝Mysql教程

    在Linux系統(tǒng)安裝Mysql教程

    本文給大家分享的是如何在linux下安裝mysql 圖解教程,步奏非常詳細,也很實用,這里推薦給大家
    2016-04-04
  • MySQL轉換Oracle的需要注意的七個事項

    MySQL轉換Oracle的需要注意的七個事項

    有很多應用項目, 剛起步的時候用MySQL數據庫基本上能實現各種功能需求,隨著應用用戶的增多,數據量的增加,MySQL漸漸地出現不堪重負的情況:連接很慢甚至宕機,于是就有MySQL轉換Oracle的需求,應用程序也要相應做一些修改。
    2010-12-12
  • mysql5.7.33誤刪除ibdata文件找回數據的方法

    mysql5.7.33誤刪除ibdata文件找回數據的方法

    這篇文章主要介紹了mysql5.7.33誤刪除ibdata文件找回數據的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論