共計(jì) 1127 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 中如何用臨時(shí)表的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇 mysql 中如何用臨時(shí)表文章都會(huì)有所收獲,下面我們一起來看看吧。
mysql 中用臨時(shí)表的時(shí)候:1、用到 TEMPTABLE 算法或者是 UNION 查詢中的視圖時(shí);2、用到 DISTINCT 查詢并且加上 ORDER BY 時(shí);3、SQL 中用到“SQL_SMALL_RESULT”選項(xiàng)時(shí);4、用到 FROM 中的子查詢時(shí)等等。
本教程操作環(huán)境:windows10 系統(tǒng)、mysql8.0.22 版本、Dell G3 電腦。
mysql 中什么時(shí)候用臨時(shí)表
MySQL 在以下幾種情況會(huì)創(chuàng)建臨時(shí)表:
1、UNION 查詢;
2、用到 TEMPTABLE 算法或者是 UNION 查詢中的視圖;
3、ORDER BY 和 GROUP BY 的子句不一樣時(shí);
4、表連接中,ORDER BY 的列不是驅(qū)動(dòng)表中的;
5、DISTINCT 查詢并且加上 ORDER BY 時(shí);
6、SQL 中用到 SQL_SMALL_RESULT 選項(xiàng)時(shí);
7、FROM 中的子查詢;
8、子查詢或者 semi-join 時(shí)創(chuàng)建的表;
EXPLAIN 查看執(zhí)行計(jì)劃結(jié)果的 Extra 列中,如果包含 Using Temporary 就表示會(huì)用到臨時(shí)表。
當(dāng)然了,如果臨時(shí)表中需要存儲(chǔ)的數(shù)據(jù)量超過了上限(tmp-table-size 或 max-heap-table-size 中取其大者),這時(shí)候就需要生成基于磁盤的臨時(shí)表了。
在以下幾種情況下,會(huì)創(chuàng)建磁盤臨時(shí)表:
1、數(shù)據(jù)表中包含 BLOB/TEXT 列;
2、在 GROUP BY 或者 DSTINCT 的列中有超過 512 字符 的字符類型列(或者超過 512 字節(jié)的 二進(jìn)制類型列,在 5.6.15 之前只管是否超過 512 字節(jié));
3、在 SELECT、UNION、UNION ALL 查詢中,存在最大長(zhǎng)度超過 512 的列(對(duì)于字符串類型是 512 個(gè)字符,對(duì)于二進(jìn)制類型則是 512 字節(jié));
4、執(zhí)行 SHOW COLUMNS/FIELDS、DESCRIBE 等 SQL 命令,因?yàn)樗鼈兊膱?zhí)行結(jié)果用到了 BLOB 列類型。
從 5.7.5 開始,新增一個(gè)系統(tǒng)選項(xiàng) internal_tmp_disk_storage_engine 可定義磁盤臨時(shí)表的引擎類型為 InnoDB,而在這以前,只能使用 MyISAM。而在 5.6.3 以后新增的系統(tǒng)選項(xiàng) default_tmp_storage_engine 是控制 CREATE TEMPORARY TABLE 創(chuàng)建的臨時(shí)表的引擎類型,在以前默認(rèn)是 MEMORY,不要把這二者混淆了。
見下例:
關(guān)于“mysql 中如何用臨時(shí)表”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“mysql 中如何用臨時(shí)表”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。