《MySQL——臨時表》

內存表與臨時表區別

臨時表,一般是人手動創建。 內存表,是mysql自動創建和銷毀的。

內存表,指的是使用Memory引擎的表,建表語法:create table ... engine = memeory

表的數據存在內存里,系統重啟后會被清空,但是表的結構還在。

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

臨時表特性

1、一個臨時表只能被創建它的session訪問,對于其他線程不可見,當此session結束時,會自動刪除臨時表

2、臨時表可以與普通表同名。如果同一個session里有同名的臨時表和普通表,使用show create語句以及增刪改查語句,訪問的是臨時表

3、show tables命令不顯示臨時表

臨時表的應用

由于不用擔心線程之間的重名沖突,臨時表經常被用在復雜查詢的優化過程中。其中,分庫分表系統的跨庫查詢就是一個典型的使用場景。

查詢語句到所有的分庫中查找滿足條件的行,然后統一做order by操作。

可以把各個分庫拿到的數據匯總到一個MySQL實例的一個表中,然后在這個匯總實例上做邏輯操作。如下:
在這里插入圖片描述

至于臨時表的存儲位置,可以放在分庫中的某一個。

另外一個使用場景就是使用union(如果使用的是union all就不需要用了)。系統會先創建一個內部臨時表,執行第一個子查詢的結果放到臨時表中,執行第二個子查詢的結果先看看插入是否成功,成功則插入。最后從臨時表中按行取數據,然后返回結果,刪除臨時表。

臨時表可以重名的原因

無論是普通表還是臨時表,一個表都會對應一個table_def_def

  • 一個普通表的table_def_def的值由"庫名+表名"得到。所以在同一個庫下創建兩個同名的普通表,會由重復性錯誤。
  • 對于臨時表,table_def_def在“庫名+表名”的基礎上還加上了“server_id + thread_id”

在實現上,每個線程都維護了自己的臨時表鏈表,每次session內操作表的時候,先遍歷鏈表,檢查是否有這個名字的的臨時表,有就優先操作,否則再操作普通表。

session結束時,對鏈表中的每個臨時表,執行drop操作。這個操作也會被寫道binlog里用于主備復制。

臨時表的主備同步

row格式的binlog不會記錄臨時表相關語句,只有statement或者mixed格式才會記錄。

創建臨時表的語句會傳到備庫執行,因此備庫的同步線程就會創建這個臨時表。主庫在線程退出的時候會自動刪除臨時表,但是備庫同步線程還是在運行的,所以主庫還需要寫個DROP TEMPORARY TABLE傳給備庫。

當主庫上兩個session創建了同名臨時表t1,這兩個語句被傳給備庫上。

主庫執行語句的線程id會被寫道binlog中,備庫可以用線程id構造臨時表的table_def_key:

備庫名 + t1 + “主庫的serverid” + “session的thread_id”,所以兩個表在備庫的應用線程不會沖突。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377150.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android中ActionBar的幾個屬性

actionBar.setHomeButtonEnabled //小于4.0版本的默認值為true的。但是在4.0及其以上是false,該方法的作用:決定左上角的圖標是否可以點擊。沒有向左的小圖標。 true 圖標可以點擊 false 不可以點擊。 actionBar.setDisplayHomeAsUpEnabled(true) //…

drei

模擬9 T3 (COGS上也有,鏈接http://218.28.19.228/cogs/problem/problem.php?pid1428) 題目描述 輸入a,p,求最小正整數x,使得a^x mod p 1。 分析 神奇的歐拉定理(對于gcd(a&#xf…

《MySQL——group by使用tips》

1、如果對group by語句結果沒有排序要求,在語句后面加order by null 2、盡量讓group by 過程用上索引,確認方法是explain結果里沒有Using temporary 和Using filesort 3、如果group by 需要統計的數據量不大,盡量只使用內存臨時表&#xff…

css中變量_CSS中的變量

css中變量CSS | 變數 (CSS | Variables) CSS variables allow you to create reusable values that can be used throughout a CSS document. CSS變量允許您創建可在CSS文檔中使用的可重用值。 In CSS variable, function var() allows CSS variables to be accessed. 在CSS變…

位圖像素的顏色 攜程編程大賽hdu

位圖像素的顏色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description 有一個在位圖上畫出矩形程序,一開始位圖都被初始化為白色(RGB顏色表示…

《MySQL——InnoDB與Memory以及臨時表》

InooDB與Memory 數據組織方式不同: InnoDB引擎把數據放在主鍵索引上,其他索引上保存的是主鍵id。為索引組織表Memory引擎把數據單獨存放,索引上保存數據位置。為堆組織表 典型不同處: 1、InnoDB表的數據總是有序存放的&#x…

Oracle 用戶 profile 屬性 轉

--查看profile 內容 select * from dba_profiles where profilePF_EAGLE; --查看用戶的profiles select username,profile from dba_users; --查看是否啟用動態資源限制參數 SHOW PARAMETER RESOURCE_LIMIT; --啟用限制 ALTER SYSTEM SET RESOURCE_LIMITTRUE SCOPEBOTH; --創建…

CUL8R的完整形式是什么?

CUL8R:稍后再見 (CUL8R: See You Later) CUL8R is an abbreviation of "See You Later". CUL8R是“稍后見”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Yahoo M…

SuperSpider——打造功能強大的爬蟲利器

SuperSpider——打造功能強大的爬蟲利器 博文作者:加菲 發布日期:2013-12-11 閱讀次數:4506 博文內容: 1.爬蟲的介紹 圖1-1 爬蟲(spider) 網絡爬蟲(web spider)是一個自動的通過網絡抓取互聯網上的網頁的程序&#xf…

《MySQL——關于grant賦權以及flush privileges》

先上總結圖: 對于賦予權限或者收回權限還是創建用戶,都會涉及兩個操作: 1、磁盤,mysql.user表,用戶行所有表示權限的字段的值的修改 2、內存,acl_users找到用戶對應的對象,將access值修改 g…

對Spring的理解

1、Spring實現了工廠模式的工廠類&#xff0c;這個類名為BeanFactory實際上是一個接口&#xff0c;在程序中通常BeanFactory的子類ApplicationContext。Spring相當于一個大的工廠類&#xff0c;在其配置文件中通過<bean>元素配置用于創建實例對象的類名和實例對象的屬性。…

Java中的null是什么?

As we know null is an important concept in every language not only in Java but here we will study various factors regarding null. 我們知道null在每種語言中都是重要的概念&#xff0c;不僅在Java中&#xff0c;在這里我們還將研究有關null的各種因素。 null is a ver…

《MySQL——分區表小記》

分區表的組織形式 以年份為分割方式&#xff0c;對表進行分割&#xff1a; CREATE TABLE t (ftime datetime NOT NULL,c int(11) DEFAULT NULL,KEY (ftime) ) ENGINEInnoDB DEFAULT CHARSETlatin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (201…

實戰Windows下安裝boost

Boost大部分組件無需編譯可直接包含頭文件使用&#xff0c;但還有一些庫需要編譯成靜態庫或動態庫才能使用。可使用下文將提到的bjam工具&#xff1a;bjam --show-libraries 查看必須編譯才能使用的庫。 編譯安裝環境&#xff1a;Win7&#xff0c;VS2008(msvc-9.0) 1. 下載boos…

postgresq dur_DUR的完整形式是什么?

postgresq dur杜爾(DUR)&#xff1a;您還記得嗎&#xff1f; (DUR?: Do You Remember?) DUR? is an abbreviation of "Do You Remember?". DUR&#xff1f; 是“您還記得嗎&#xff1f;”的縮寫。 。 It is an expression, which is commonly used in messaging…

gsettings-desktop-schemas : 破壞: mutter (< 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安裝解決方案

完整報錯&#xff1a; dyydyy-Lenovo-ThinkBook-14-IIL:~$ sudo apt install build-essential 正在讀取軟件包列表... 完成 正在分析軟件包的依賴關系樹 正在讀取狀態信息... 完成 有一些軟件包無法被安裝。如果您用的是 unstable 發行版&#xff0c;這也許是 因…

程序內存檢測

本文參考自&#xff1a;http://www.cnblogs.com/hebeiDGL/p/3410188.html static System.Windows.Threading.DispatcherTimer dispacherTimer;static string total "DeviceTotalMemory";static string current "ApplicationCurrentMemoryUsage";static s…

動態規劃天天練1

本來很久以前就打算每天練一道動態規劃題的&#xff0c;但每每由于作業太多而中斷&#xff0c;現在終于停課了......廢話不多說&#xff0c;第一道題就給了我迎頭一棒&#xff0c;不僅想了很久&#xff0c;連題解都看了很久。。。水平相當不足啊啊&#xff0c;不多說廢話&#…

AAS的完整形式是什么?

AAS&#xff1a;活著和微笑 (AAS: Alive And Smiling) AAS is an abbreviation of "Alive And Smiling". AAS是“活著和微笑”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites like Facebook, Y…

《MySQL 8.0.22執行器源碼分析(1)——execute iterator一些記錄》

目錄一條語句的函數調用棧順序8.0使用迭代器模式改進executorint *handler*::ha_rnd_next(*uchar* **buf*)int *TableScanIterator*::Read()int FilterIterator :: Read&#xff08;&#xff09;int HashJoinIterator::Read()int NestedLoopIterator :: Read&#xff08;&#…