国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Mysql5.7臨時表的使用(文檔翻譯)

douzifly / 1653人閱讀

摘要:評估結(jié)合查詢可能需要臨時表。要確定語句是否需要臨時表,請使用并檢查列以查看是否顯示請參見第節(jié)使用優(yōu)化查詢。這些條件符合條件,無需臨時表是,不是或。內(nèi)存中臨時表的最大大小由兩者中和中較小的決定。系統(tǒng)變量可以用來強制內(nèi)部臨時表的磁盤存儲。

源鏈接:https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html

在某些情況下,服務(wù)器在處理Sql語句時創(chuàng)建內(nèi)部臨時表。用戶無法直接控制何時發(fā)生。

服務(wù)器在以下條件下創(chuàng)建臨時表:
(Evaluation有什么特殊意思嗎?我翻譯成了評估)

聲明的 UNION 評估,稍后描述一些例外。

評估一些視圖,如使用 TEMPTABLE 算法, UNION 或聚合的視圖。

派生表(FROM 從句中的子查詢)。

創(chuàng)建用于子查詢或半連接實現(xiàn)的表。

評估包含一個 ORDER BY 子句和一個不同的 GROUP BY 子句的語句,或者對于該語句 ORDER BYGROUP BY 包含來自連接隊列中的第一個表之外的列的列。

評估 DISTINCT 結(jié)合 ORDER BY 查詢可能需要臨時表。

對于使用 SQL_SMALL_RESULT 修飾符的查詢,MySQL使用內(nèi)存中臨時表,除非查詢還包含需要磁盤存儲的元素(稍后介紹)。

評估多表 UPDATE 語句。

評估 GROUP_CONCAT()COUNT(DISTINCT) 表達式。

要確定語句是否需要臨時表,請使用 EXPLAIN 并檢查 Extra 列以查看是否顯示 Using temporary(請參見 第9.8.1節(jié)“使用 EXPLAIN 優(yōu)化查詢”)。對于派生或物理化的臨時表, EXPLAIN 不一定說 Using temporary

當(dāng)服務(wù)器創(chuàng)建內(nèi)部臨時表(在內(nèi)存或磁盤上)時,會增加 Created_tmp_tables 狀態(tài)變量。如果服務(wù)器在磁盤上創(chuàng)建表(最初或通過轉(zhuǎn)換內(nèi)存中的表),它會增加 Created_tmp_disk_tables 狀態(tài)變量。

某些查詢條件阻止使用內(nèi)存中臨時表,在這種情況下,服務(wù)器會使用磁盤表:

表中 存在 BLOBTEXT

SELECT 列表中存在任何字符串列的最大長度大于512(二進制字符串的字節(jié),非二進制字符的字符),如果UNIONUNION ALL 使用的情況下

SHOW COLUMNSDESCRIBE 語句中使用 BLOB 作為用于某些字段的數(shù)據(jù)類型,從而用于結(jié)果的臨時表是磁盤上的表。

服務(wù)器不使用 UNION 符合特定條件語句的臨時表。相反,它保留了從臨時表創(chuàng)建唯一的數(shù)據(jù)結(jié)構(gòu)進行必要的結(jié)果列的類型轉(zhuǎn)換。表沒有完全實例化,沒有行被寫入或讀取; 行直接發(fā)送到客戶端。結(jié)果是減少了內(nèi)存和磁盤要求,并且在將第一行發(fā)送到客戶端之前的較小延遲,因為服務(wù)器不需要等待直到最后一個查詢塊被執(zhí)行。EXPLAIN 優(yōu)化器跟蹤輸出反映了此執(zhí)行策略:UNION RESULT 查詢塊不存在,因為該塊對應(yīng)于從臨時表讀取的部分。

這些條件符合條件 UNION ,無需臨時表:

unionUNION ALL,不是 UNIONUNION DISTINCT

沒有全局 ORDER BY 從句。

union 不是一個 {INSERT | REPLACE} ... SELECT 操作的頂級語句的查詢塊。

用于臨時表的存儲引擎

臨時表存儲格式

用于臨時表的存儲引擎

內(nèi)部臨時表可以在保存內(nèi)存中并且由 MEMORY 存儲引擎處理,或者以 InnoDBMyISAM 存儲引擎存儲在磁盤上。

如果表是內(nèi)部臨時表并且被存儲在內(nèi)存中,但是變得太大,MySQL 會自動將其轉(zhuǎn)換為磁盤表。內(nèi)存中臨時表的最大大小由兩者中 tmp_table_sizemax_heap_table_size 中較小的決定。這與使用 CREATE TABLE 顯式創(chuàng)建的內(nèi)存表不同, 對于這樣的表,只有 max_heap_table_size 系統(tǒng)變量確定表允許增長的大小,并且沒有轉(zhuǎn)換為磁盤格式。

所述 internal_tmp_disk_storage_engine 系統(tǒng)變量確定服務(wù)器使用哪個存儲引擎來管理的磁盤上的內(nèi)部臨時表。允許的值為 INNODB (默認(rèn)值)和 MYISAM

**注意**
使用 `internal_tmp_disk_storage_engine=INNODB` 生成超過 `InnoDB` 行或列限制的臨時表的查詢, 
如果返回行大小太大或列錯誤太多。解決方法是設(shè)置 `internal_tmp_disk_storage_engine` 為 `MYISAM`。

臨時表存儲格式

存儲器內(nèi)臨時表由 MEMORY 存儲引擎管理,存儲引擎使用固定長度的行格式。VARCHARVARBINARY 列值填充到最大列長度,實際上將它們存儲為 CHARBINARY 列。

在磁盤上的臨時表由管理 InnoDBMyISAM 存儲引擎(取決于 internal_tmp_disk_storage_engine 設(shè)置)。兩個引擎使用動態(tài)寬度行格式存儲臨時表。列只需要盡可能多的存儲空間,與使用固定長度行的磁盤表相比,減少了磁盤 I/O 和空間要求以及處理時間。

對于最初在內(nèi)存中創(chuàng)建內(nèi)部臨時表的語句,然后將其轉(zhuǎn)換為磁盤表,可能會通過跳過轉(zhuǎn)換步驟并在磁盤上創(chuàng)建表來實現(xiàn)更好的性能。big_tables 系統(tǒng)變量可以用來強制內(nèi)部臨時表的磁盤存儲。

翻譯的有問題的地方,請大家多多指教。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30564.html

相關(guān)文章

  • MySQL常用存儲引擎之MyISAM

    摘要:所以,使用存儲引擎的表,讀取和寫入這兩種操作是互斥的。版本時默認(rèn)支持為適用場景非事務(wù)型應(yīng)用本身時一種非事務(wù)型存儲引擎,也就是說是不支持事務(wù)的。空間類應(yīng)用在之前,是唯一支持空間函數(shù)的存儲引擎。 1. mysql 5.5之前版本默認(rèn)存儲引擎 1.1 因為這個原因現(xiàn)在還有大量服務(wù)器在使用這myisam引擎的表 1.2 myisam是mysql大部分系統(tǒng)表和臨時表使用的存儲引擎 showImg...

    Reducto 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<