溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中臨時(shí)表如何使用

發(fā)布時(shí)間:2021-07-24 16:33:04 來(lái)源:億速云 閱讀:211 作者:Leah 欄目:數(shù)據(jù)庫(kù)

今天就跟大家聊聊有關(guān)MySQL中臨時(shí)表如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

MySQL如何使用臨時(shí)表
 
【臨時(shí)表存儲(chǔ)】
MySQL臨時(shí)表分為“內(nèi)存臨時(shí)表”和“磁盤臨時(shí)表”,其中內(nèi)存臨時(shí)表使用MySQL的MEMORY存儲(chǔ)引擎,磁盤臨時(shí)表使用MySQL的MyISAM存儲(chǔ)引擎;
一般情況下,MySQL會(huì)先創(chuàng)建內(nèi)存臨時(shí)表,但內(nèi)存臨時(shí)表超過(guò)配置指定的值后,MySQL會(huì)將內(nèi)存臨時(shí)表導(dǎo)出到磁盤臨時(shí)表。  www.2cto.com  
 
【使用臨時(shí)表的場(chǎng)景】
1)ORDER BY子句和GROUP BY子句不同,
例如:ORDERY BY price GROUP BY name;
 
2)在JOIN查詢中,ORDER BY或者GROUP BY使用了不是第一個(gè)表的列
例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by TableB.name
 
3)ORDER BY中使用了DISTINCT關(guān)鍵字
ORDERY BY DISTINCT(price)
 
4)SELECT語(yǔ)句中指定了SQL_SMALL_RESULT關(guān)鍵字
SQL_SMALL_RESULT的意思就是告訴MySQL,結(jié)果會(huì)很小,請(qǐng)直接使用內(nèi)存臨時(shí)表,不需要使用索引排序
SQL_SMALL_RESULT必須和GROUP BY、DISTINCT或DISTINCTROW一起使用
一般情況下,我們沒(méi)有必要使用這個(gè)選項(xiàng),讓MySQL服務(wù)器選擇即可。
 
【直接使用磁盤臨時(shí)表的場(chǎng)景】
1)表包含TEXT或者BLOB列;
2)GROUP BY 或者 DISTINCT 子句中包含長(zhǎng)度大于512字節(jié)的列;
3)使用UNION或者UNION ALL時(shí),SELECT子句中包含大于512字節(jié)的列;
  www.2cto.com  
【臨時(shí)表相關(guān)配置】
tmp_table_size:指定系統(tǒng)創(chuàng)建的內(nèi)存臨時(shí)表最大大??;

http://dev..com/doc/refman/5.1/en/server-system-variables.html#sysvar_tmp_table_size

 
max_heap_table_size: 指定用戶創(chuàng)建的內(nèi)存表的最大大小;

http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_heap_table_size

 
注意:最終的系統(tǒng)創(chuàng)建的內(nèi)存臨時(shí)表大小是取上述兩個(gè)配置值的最小值。
 
【表的設(shè)計(jì)原則】
使用臨時(shí)表一般都意味著性能比較低,特別是使用磁盤臨時(shí)表,性能更慢,因此我們?cè)趯?shí)際應(yīng)用中應(yīng)該盡量避免臨時(shí)表的使用。
如果實(shí)在無(wú)法避免,也應(yīng)該盡量避免使用磁盤臨時(shí)表。
 
常見(jiàn)的方法有:
1)創(chuàng)建索引:在ORDER BY或者GROUP BY的列上創(chuàng)建索引,這樣可以避免使用臨時(shí)表;
2)分拆很長(zhǎng)的列,可以避免使用磁盤臨時(shí)表:一般情況下,TEXT、BLOB,大于512字節(jié)的字符串,基本上都是為了顯示信息,而不會(huì)用于查詢條件,因此表設(shè)計(jì)的時(shí)候,應(yīng)該將這些列獨(dú)立到另外一張表。  www.2cto.com  
 
【如何判斷使用了臨時(shí)表】
使用explain查看執(zhí)行計(jì)劃,Extra列看到Using temporary就意味著使用了臨時(shí)表。

看完上述內(nèi)容,你們對(duì)MySQL中臨時(shí)表如何使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI