原創 複製中臨時表的運用TIPS

2021-09-03 06:06:54 字數 799 閱讀 1027

我們知道, 臨時表有以下特性:

1. session 級別, session 一旦斷掉,就被自動drop 了。

2. 和預設引擎有關。 如果預設引擎是innodb,而你又瘋狂的使用臨時表。那麼,你的ibdata會被無限的增大。

3. 和磁碟表一樣,預設寫入到binlog, 而且被動的加入了rollback 計畫。

幻想如下場景:

資料庫損壞,也沒有備份。剛好二進位制日誌全部儲存完好, 幸福了。 匯入二進位制日誌到mysql。

有兩種方法:

1) mysqlbinlog ..... *.log | mysql dbname; 這種利用管道直接恢復資料,時間短,效率高。 可裡面如果有一堆的臨時表,而且剛好在日誌的中間,那麼悲劇了, 匯入失敗。 (回想臨時表的特性就知道了。)

2) mysqlbinlog ..... *.log > result.log;mysql dbname < result.log;  這種時間長,效率低,占用磁碟空間高,浪費多次系統資源。 可是匯入成功了。

如果有大量的臨時表應用, 那麼在主從複製中,應該採取的正確方法為: (這個我可是08年就說過了。)

在寫資料時,當然這裡只的是主機。 無論在應用程式或者自己用客戶端對mysql來進行管理,都應該這樣:

set sql_log_bin=0; 關掉session級別的複製。 

update tmp_t1, tmp_t2 set ....; 

drop tmp_t1; 

drop tmp_t2; 

set sql_log_bin=1; 開啟session級別的複製。 

Oracle With as 臨時表的運用

工作中資料庫資料處理有時會遇到這樣一種情況,需要將多個字段集中收集到一起,然後在多個sql中多次使用這個收集好的資料集。一種方式是用時檢視,將要處理資料用到的字段資料使用檢視的方式進行多次查詢訪問。另一種方式是使用 with as 建立乙個臨時表,將資料集中進行多次使用。建立臨時表的語法如下 wit...

mysql中的臨時表

建立臨時表很容易,給正常的create table語句加上temporary關鍵字 create temporary table tmp table name varchar 10 not null,value integer not null 臨時表將在你連線mysql期間存在。當你斷開時,mys...

MS SQL SERVER中的臨時表

對於複雜的查詢,我們可以使用巢狀的複雜的sql語句來實現,但是有些時候,借助於臨時表,可以更加方便 高效。sql server 支援臨時表。臨時表就是那些名稱以井號 開頭的表。如果當使用者斷開連線時沒有除去臨時表,sql server 將自動除去臨時表。臨時表不儲存在當前資料庫內,而是儲存在系統資料...