mysql 產生臨時表的幾種情況

2021-09-20 21:38:37 字數 775 閱讀 6707

1、union查詢;

2、用到temptable演算法或者是union查詢中的檢視;

3、order by和group by的子句不一樣時;

4、表連線中,order by的列不是驅動表中的;

5、distinct查詢並且加上order by時;

6、sql中用到sql_small_result選項時;

7、from中的子查詢;

8、子查詢或者semi-join時建立的表

semi-join:

所謂的semi-join是指semi-join子查詢。 當一張表在另一張表找到匹配的記錄之後,半連線(semi-jion)返回第一張表中的記錄。與條件連線相反,即使在右節點中找到幾條匹配的記錄,左節點 的表也只會返回一條記錄。另外,右節點的表一條記錄也不會返回。半連線通常使用in 或 exists 作為連線條件。 該子查詢具有如下結構:

select ... from outer_tables where expr in (select ... from inner_tables ...) and ...
即在where條件的「in」中的那個子查詢。

這種查詢的特點是我們只關心outer_table中與semi-join相匹配的記錄。

換句話說,最後的結果集是在outer_tables中的,而semi-join的作用只是對outer_tables中的記錄進行篩選。這也是我們進行 semi-join優化的基礎,即我們只需要從semi-join中獲取到最少量的足以對outer_tables記錄進行篩選的資訊就足夠了。

MySQL使用臨時表的情況

mysql在以下幾種情況會建立臨時表 1 union查詢 2 用到temptable演算法或者是union查詢中的檢視 3 order by和group by的子句不一樣時 4 表連線中,order by的列不是驅動表中的 5 distinct查詢並且加上order by時 6 sql中用到sql ...

mysql刪除表資料幾種情況

1 drop table table name 刪除表全部資料和表結構,立刻釋放磁碟空間,不管是 innodb 和 myisam 例項,刪除學生表 drop table student 2 truncate table table name 刪除表全部資料,保留表結構,立刻釋放磁碟空間 不管是 in...

mysql臨時表更新 MySql 臨時表

今天在專案中遇到乙個,當mysql的in語句中資料量很大時,建立乙個臨時表的例子。於是樓主整理了一下關於臨時表的知識,與大家分享一下 首先,臨時表只在當前連線可見,當關閉連線時,mysql會自動刪除表並釋放所有空間。因此在不同的連線中可以建立同名的臨時表,並且操作屬於本連線的臨時表。建立臨時表 cr...