-
你是對的:
客戶端建立乙個新的會話,這個會話只是伺服器和客戶端之間的一對一關係,客戶端可能會在伺服器上設定乙個臨時表來滿足客戶端處理某些事務的需要,當客戶端退出會話時,臨時表會自動丟棄,沒有資料資訊占用資料庫空間。
這是第乙個優點:節省空間。
客戶端建立僅為特定事務提供服務的臨時表,並且此表是私有的,不需要與他人共享。 所以還有第二個優勢:私隱。
客戶端建立的臨時表具有獨立的操作和讀寫效能,因此速度更快,效率更高,這具有第三個優勢:效率高。
根據客戶的需求,類似情況有很多可能性。
-
1. 本地臨時表(開頭)僅對當前連線有效,當前連線斷開時會自動刪除。
2. 全域性臨時表(開頭)對其他連線也有效,當當前連線和訪問它的其他連線斷開連線時,將自動刪除。
3. 不管是本地臨時表還是全域性臨時表,只要連線有訪問許可權,都可以使用丟棄表tmp(或丟棄表tmp)顯式刪除臨時表。
-
我們仍在使用實驗室 05 中的環境,省略了準備資料的過程。
我們仍然使用兩個會話,乙個會話執行,用於執行主 SQL; 另乙個會話 ps,用於觀察效能架構:
在效能架構中重置統計資訊,臨時表的表大小限制取決於引數 tmp table size 和 max heap table size 中的較小者,我們在實驗中以設定最大堆表大小為例。
我們將會話級時態表大小設定為 2M(小於上乙個實驗中時態表使用的空間)並執行 sql:using 時態表
檢視記憶體分配記錄:
我們會發現記憶體分配略大於2m,我們猜測臨時表會消耗比配置多一點,可以忽略不計。
您可以看到該語句使用了乙個需要刪除一次的臨時表。
那麼這個臨時表使用了多少磁碟呢?
重做實驗,跳過它。
然後檢視效能架構的統計值:
可以看到以下幾種現象:
1.臨時表空間將寫入 。
2.此資料在語句寫入後緩慢而逐漸地寫入。
可以看到寫入資料的執行緒是頁面乾淨執行緒,這是乙個髒操作,這樣你就可以理解為什麼資料寫入速度很慢。
您還可以看到每個 IO 操作的大小為 16K,也就是刷資料頁的操作。
結論:正如我們所看到的,1MySQL基本遵循最大堆表大小設定,當記憶體不足時,直接將表轉移到磁碟進行儲存。
2.由於引擎不同(記憶體中表引擎是 HEAP,磁碟中表引擎遵循內部 TMP 磁碟儲存引擎的配置),本實驗中寫入磁碟的資料量與實驗 05 中記憶體中使用的資料量不同。
3.如果臨時表使用磁碟,並且表引擎配置為 innodb,即使臨時表在短期 SQL 語句中使用,使用後釋放,釋放後也會刷到磁碟上,消耗部分 I/O。
-
以及文字資料型別與臨時表之間的關係。
在討論如何在磁碟上獲取臨時表或在記憶體中獲取臨時表的話題時,我認為有必要談談兩種資料型別,blob 和 text。 這兩種資料型別都用於儲存大量資料。 前者以二進位形式儲存,而後者以字元形式儲存。
這兩種資料型別與其他資料型別有著根本的不同。 在MySQL資料庫中,這兩種資料型別被視為具有實體的物件。 儲存引擎也將使用乙個特殊的引擎。
-
MySQL需要建立隱式臨時表來解析某些型別的查詢。 通常,查詢的排序階段需要依賴於臨時表。 例如,當您使用 group by、order by 或 distinct。
此類查詢分兩個階段執行:首先收集資料並將其放入臨時表中,然後對臨時表執行排序。
對於某些聯合語句、無法合併的檢視、用於子查詢的派生表、多表更新以及其他一些情況,還需要臨時表。 如果臨時表很小,可以在記憶體中建立,否則會在磁碟上建立。 MySQL在記憶體中建立乙個表,如果它變得太大,則該錶將轉換為磁碟儲存。
記憶體中臨時表的最大值由 tmp 表大小或最大堆表大小值定義,以較小者為準。 MySQL 中的預設大小為 16MB。 如果執行包含大量資料的查詢,或者尚未對查詢進行優化,則可以增加該值。
設定閾值時,請考慮高峰期的可用 RAM 量和併發連線數。 你不能無限期地增加變數,因為在某些時候你需要讓MySQL使用磁碟上的臨時表。
注意:如果相關表具有文字或 blob 列,則即使大小小於配置的閾值,也會在磁碟上建立乙個臨時表。
-
臨時表的資料和結構儲存在記憶體中。
通過將 temporary 關鍵字新增到普通的 create table 語句中,可以很容易地建立臨時表
create temporary table tmp_table (name varchar(10) not null,value integer not null)
-
臨時表與記憶體表不同。 很容易混淆。
臨時表的表結構和資料儲存在記憶體中。 使用時,可以直接使用記憶體表的表結構將其儲存在磁碟上,記憶體中只儲存資料。
若要建立臨時表,請新增乙個臨時建立臨時表(字段 1 約束、字段 2 約束、nbsp; .
-
使用聯接而不是子查詢來選取最適用的字段屬性。
使用聯合而不是手動建立的臨時表,使用事務,使用外來鍵,並使用索引優化查詢語句。
盡量避免使用它,它會被優化。
-
您可以將一些經常訪問的資料放入臨時表中,這樣訪問速度會更快。
因為資料在伺服器記憶體中。
此外,每次查詢時,資料庫都需要在臨時表中生成一些臨時資料。
-
對臨時表的操作不會影響原始表。
-
臨時表僅對當前連線可見,當連線關閉時,MySQL會自動刪除該錶並釋放所有空間。 如果使用 PHP 指令碼建立 MySQL 臨時表,則每當執行 PHP 指令碼時,臨時表都會被自動銷毀。
刪除MySQL臨時表預設情況下,當您斷開與資料庫的連線時,將自動銷毀臨時表。 當然,您也可以在當前 mysql 會話中使用 drop table 命令手動刪除臨時表。
以下是手動刪除臨時表的示例:
來自 Sloth Academy - 一站式資料知識平台。
-
本地臨時表會在當前會話結束時自動消失,並且僅在當前回撥後有效,全域性臨時表只有在所有回覆結束後才會消失,並且您建立的全域性臨時表可以被其他人訪問。
-
我們來看看什麼樣的資料庫的臨時表。 一般來說,mssql和mysql的臨時表不需要刪除,只要伺服器重啟就會被清除,相當於乙個記憶體中的表,只儲存在記憶體中。
-
有兩種型別的臨時表。
一種是普通的臨時表。
建立表表名。
字段型別 Other。
建立。 即使其他人不可見,這種表也會建立。
將清除連線表的一部分。
建立時,還有一種型別稱為全域性時態表。
建立表表名。
字段型別 Other。
可以建立這種表來建立乙個可以訪問的域(本地連線線),這種表與前乙個有點不同。
他必須登出所有訪問人員,沒有人會連線,訪問將被斷開,臨時表可以單獨放置,除非必要,否則你可以讓他乙個人呆著,當你斷開連線時,它自然會被清除。
-
一般情況下,資料在斷開連線時會自動刪除,也可以手動刪除表名。
學校採用“科室結合、獨立管理”的現代管理模式,在追求科學化、規範化、精細化的同時,引入競爭互動機制,堅持法治,實行民主管理,創新校園文化,倡導人文關懷。 >>>More