當前位置:首頁 » 數據倉庫 » 資料庫臨時表叫什麼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫臨時表叫什麼

發布時間: 2023-06-13 02:00:35

『壹』 sqlserver 臨時表有什麼用

sqlserver中說到臨時表就不得不提到永久表

  1. 臨時表與永久表相似,但臨時表存儲在tempdb中,當不再使用時會自動刪除。臨時表有兩種類型:本地和全局。它們在名稱、可見性以及可用性上有區別。本地臨時表的名稱以單個數字元號(#)打頭;它們僅對當前的用戶連接是可見的;當用戶從SQLServer實例斷開連接時被刪除。全局臨時表的名稱以兩個數字元號(##)打頭,創建後對任何用戶都是可見的,當所有引用該表的用戶從SQLServer斷開連接時被刪除。

  2. 臨時表就是用戶在創建表的時候添加了「#」前綴的表,其特點是根據進程獨立。只有進程的擁有者有表的訪問許可權,其它用戶不能訪問該表;

  3. 不同的用戶進程,創建的臨時表雖然「名字」相同,但是這些表之間相互並不存在任何關系;在SQLSERVER中,通過特別的命名機制保證臨時表的進程獨立性。

  4. 定單和購買意向一般不會保存在真正的「臨時表」中,而是實際的普通表,之所以稱之為「臨時表」,只是一種叫法而已。因為隨著一個用戶進程的結束,真正的臨時表會自動清除,而定單和購買意向數據一般是定時清除,所以一定是保存在普通表中,具備數據的持久性特徵(臨時表最缺乏的就是數據的持久性)。

  5. 真正的臨時表利用了資料庫臨時表空間,由資料庫系統自動進行維護,因此節省了表空間。並且由於臨時表空間一般利用虛擬內存,大大減少了硬碟的I/O次數,因此也提高了系統效率。

『貳』 系統資料庫中哪個資料庫可以存放臨時表

SQL Server 2005有4個系統資料庫,它們分別為Master、Model、Msdb、Tempdb。SQL 的所有系統信息都記錄在Master資料庫中。model 資料庫用作在 SQL Server 實例上創建的所有資料庫的模板(比如你利用模板創建一張表、一個存儲過程、函數等等,這些模板都是在Model資料庫中存儲的)Msdb資料庫是代理服務資料庫,你設置的一些報警、任務調度、計劃任務等,她們的存儲空間就是這個資料庫。Tempdb是臨時資料庫,你使用的臨時表就是存儲在這個資料庫中。

『叄』 SQL 創建一個臨時表#tabletemp 裡面有兩個欄位「cn」和「dt」分別用來存儲另一個表的欄位名和數據類型。

提到MySQL臨時表,我們都很熟悉了,一般來說,分為兩類:

1. MySQL 臨時表引擎,名字叫做 Memory。比如

create table tmp1(id int, str1 varchar(100) ) engine = memory;

由參數max_heap_table_size 來控制,超過報錯。

2. 非臨時表的引擎,這里又分為兩類:

  • 用戶自定義的臨時表,比如:

  • create temporary table (id int, str1 varchar(100) );

  • SQL執行過程中產生的內部臨時表,比如:UNION , 聚合類ORDER BY,派生表,大對象欄位的查詢,子查詢或者半連接的固化等等場景。

  • 那麼這兩種臨時表的計數器通常用show global status like '%tmp_%tables%' 來查看。比如

  • mysql> show status like '%tmp_%tables%';``+-------------------------+-------+``| Variable_name | Value |``+-------------------------+-------+``| Created_tmp_disk_tables | 0 |``| Created_tmp_tables | 0 |``+-------------------------+-------+``2 rows in set (0.00 sec)

  • 以上結果分別代表,只創建磁碟上的臨時表計數以及臨時表的總計數。這兩個計數器由參數 tmp_table_size 和 max_heap_table_size 兩個取最小值來控制。

    那在 MySQL 5.7 之前,這個 SQL 運行中產生的臨時表是 MYISAM,而且只能是 MYISAM。那 MySQL 從 5.7 開始提供了參數 Internal_tmp_mem_storage_engine 來定義內部的臨時表引擎,可選值為 MYISAM 和 INNODB 。當然這里我們選擇 INNODB 。並且把內部的臨時表默認保存在臨時表空間 ibtmp1 (可以用參數 innodb_temp_data_file_path 設置大小以及步長等)下。當然這里我們得控制下 ibtmp1 的大小,要不然一個爛SQL就把磁碟整爆了。

    但是MySQL 5.7 之前都沒有解決如下問題:

  • VARCHAR的變長存儲。那就是如果臨時表的欄位定義是 VARCHAR(200),那麼映射到內存里處理的欄位變為CHAR(200)。假設 VARCHAR(200) 就存里一個字元 "Y", 那豈不是很大的浪費。

  • 大對象的默認磁碟存儲,比如 TEXT,BLOB, JSON等,不管裡面存放了啥,直接轉化為磁碟存儲。

  • MySQL 8.0 開始,專門實現了一個臨時表的引擎 TempTable , 解決了 VARCHAR欄位的邊長存儲以及大對象的內存存儲。由變數 interal_tmp_mem_storage_engine來控制,可選值為 TempTable(默認)和 Memory;新引擎的大小由參數temp_table_max_ram 來控制,默認為1G。超過了則存儲在磁碟上(ibtmp1)。並且計數器由性能字典的表 memory_summary_global_by_event_name 來存儲。

  • mysql> SELECT * FROM performance_schema. memory_summary_global_by_event_name WHERE event_name like '%temptable%'G*************************** 1. row *************************** EVENT_NAME: **memory/temptable/physical_disk** COUNT_ALLOC: 0 COUNT_FREE: 0 SUM_NUMBER_OF_BYTES_ALLOC: 0 SUM_NUMBER_OF_BYTES_FREE: 0 LOW_COUNT_USED: 0 CURRENT_COUNT_USED: 0 HIGH_COUNT_USED: 0 LOW_NUMBER_OF_BYTES_USED: 0CURRENT_NUMBER_OF_BYTES_USED: 0 HIGH_NUMBER_OF_BYTES_USED: 0*************************** 2. row *************************** EVENT_NAME: **memory/temptable/physical_ram** COUNT_ALLOC: 1 COUNT_FREE: 0 SUM_NUMBER_OF_BYTES_ALLOC: 1048576 SUM_NUMBER_OF_BYTES_FREE: 0 LOW_COUNT_USED: 0 CURRENT_COUNT_USED: 1 HIGH_COUNT_USED: 1 LOW_NUMBER_OF_BYTES_USED: 0CURRENT_NUMBER_OF_BYTES_USED: 1048576 HIGH_NUMBER_OF_BYTES_USED: 10485762 rows in set (0.03 sec)

  • 以上 memory/temptable/physical_disk 代表放入磁碟上的臨時表計數情況。

    memory/temptable/physical_ram 代表放入內存的臨時表計數情況。

    那總結下MySQL 8.0 引入的 TempTable 引擎:

  • 默認內部臨時表引擎。

  • 支持變長字元類型的實際存儲。

  • 設置變數 temp_table_max_ram 來控制實際存儲內存區域大小。

『肆』 資料庫中的實表、虛表、臨時表的定義

實表是基本關系,又稱基本表或者基表,是實際存儲數據的邏輯表示,臨時表是查詢表,查詢結果對應的結果,視圖表是虛表有基本表或其他的表導出的表,不對應實際存儲的數據。

『伍』 sql資料庫中#tmp什麼含義,求一份詳細的解釋

作為資料庫中的本地臨時表,與其它表的區別在於 會話域不同,僅是當前用戶的會員可用數據,當前用戶斷開資料庫時,該表就被刪除,其他用戶登錄時,在建立其自己的臨時表。