首頁 資料庫 mysql教程 詳細介紹MySQL臨時表與衍生表

詳細介紹MySQL臨時表與衍生表

Mar 25, 2017 pm 02:09 PM

MySQL在處理請求的某些場景中,伺服器建立內部臨時表。即表以MEMORY引擎在記憶體中處理,或以MyISAM引擎儲存在磁碟上處理.如果表過大,伺服器可能會把記憶體中的臨時表轉存在磁碟上。

關於派生表

當主查詢中包含派生表,或者當select 語句中包含union字句,或者當select語句中包含一個字段的order by 子句(對另一個欄位的group by 子句)時,MySQL為了完成查詢,則需要自動建立臨時表儲存臨時結果集,這種臨時表由MySQL自行創建,自行維護,成為自動建立的臨時表。對於自動建立的臨時表,由於記憶體臨時表的效能更為優越,mysql總是先使用記憶體臨時表,而當記憶體臨時表變得太大時,達到某個閾值的時候,記憶體臨時表就會轉存為外存臨時表。也就是說,外存臨時表是記憶體臨時表在儲存空間上的一種延伸。記憶體臨時表轉存為外存臨時表的閾值由系統變數max_heap_table_size和tmp_table_size的較小值決定。

派生表一般在from子句中使用。如:

select * from (select * from table) as t;
登入後複製

關於臨時表

當工作在非常大的表上時,你可能偶爾需要運行很多查詢獲得一個大量數據的小的子集,不是對整個表運行這些查詢,而是讓MySQL每次找出所需的少數記錄,將記錄選擇到一個臨時表可能更快些,然後在這些表運行查詢。

建立臨時表很容易,給正常的CREATE TABLE語句加上TEMPORARY關鍵字:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

)
登入後複製
登入後複製

臨時表將在你連接MySQL期間存在。當你斷開時,MySQL將自動刪除表並釋放所使用的空間。當然你可以在仍然連接的時候刪除表並釋放空間。

DROP TABLE tmp_table

如果在你建立名為tmp_table臨時表時名為tmp_table的表在資料庫中已經存在,臨時表將有必要屏蔽(隱藏)非臨時表tmp_table。

如果你宣告臨時表是一個HEAP表,MySQL也允許你指定在記憶體中創建它:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP
登入後複製
登入後複製

因為HEAP表儲存在記憶體中,你對它運行的查詢可能比磁碟上的臨時表快些。然而,HEAP表與一般的表有些不同,且有自身的限制。詳見MySQL參考手冊。

正如前面的建議,你應該測試臨時表看看它們是否真的比對大量資料庫運行查詢快。如果資料很好地索引,臨時表可能一點不快。

1. 臨時表再斷開於mysql的連接後系統會自動刪除臨時表中的資料,但是這只限於用下面語句建立的表:

定義字段:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

)
登入後複製
登入後複製

2)直接將查詢結果匯入臨時表

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
登入後複製

2. 另外mysql也允許你在記憶體中直接建立臨時表,因為是在記憶體中所有速度會很快,語法如下:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP
登入後複製
登入後複製

3. 從上面的分析可以看出臨時表的資料是會被清空的,你斷開了連接就會被自動清空,但是你程式中不可能每發行一次sql就連接一次資料庫吧(如果是這樣的話,那就會出現你擔心的問題,如果不是就沒有問題),因為只有斷開資料庫連線才會被清空資料,在一個資料庫連線裡面發行多次sql的話系統是不會自動清空臨時表資料的。

以上是詳細介紹MySQL臨時表與衍生表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP 的大數據結構處理技巧 PHP 的大數據結構處理技巧 May 08, 2024 am 10:24 AM

PHP 的大數據結構處理技巧

如何優化 PHP 中的 MySQL 查詢效能? 如何優化 PHP 中的 MySQL 查詢效能? Jun 03, 2024 pm 08:11 PM

如何優化 PHP 中的 MySQL 查詢效能?

如何在 PHP 中使用 MySQL 備份和還原? 如何在 PHP 中使用 MySQL 備份和還原? Jun 03, 2024 pm 12:19 PM

如何在 PHP 中使用 MySQL 備份和還原?

如何使用 PHP 插入資料到 MySQL 表? 如何使用 PHP 插入資料到 MySQL 表? Jun 02, 2024 pm 02:26 PM

如何使用 PHP 插入資料到 MySQL 表?

Java 枚舉類型在資料庫中的應用場景有哪些? Java 枚舉類型在資料庫中的應用場景有哪些? May 05, 2024 am 09:06 AM

Java 枚舉類型在資料庫中的應用場景有哪些?

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤 Dec 09, 2024 am 11:42 AM

如何修復 MySQL 8.4 上的 mysql_native_password 未載入錯誤

如何在 PHP 中使用 MySQL 預存程序? 如何在 PHP 中使用 MySQL 預存程序? Jun 02, 2024 pm 02:13 PM

如何在 PHP 中使用 MySQL 預存程序?

如何使用 PHP 建立 MySQL 表? 如何使用 PHP 建立 MySQL 表? Jun 04, 2024 pm 01:57 PM

如何使用 PHP 建立 MySQL 表?

See all articles