MySQL臨時表常常被用來存儲臨時計算結果,然后再進行下一步的操作。但是有些情況下,臨時表的統計速度卻非常慢,影響了整體數據庫的性能。
CREATE TEMPORARY TABLE tmp_table AS SELECT * FROM original_table;
SELECT COUNT(*) FROM tmp_table;
以上是大多數人使用臨時表的方式,但是這種方式可能會導致臨時表的統計速度變慢。原因是在創建臨時表的時候,所有的數據都被復制到臨時表中,而這個過程非常消耗計算資源。
下面介紹兩種優化臨時表統計速度的方法:
CREATE TEMPORARY TABLE tmp_table
ENGINE = MEMORY
AS SELECT * FROM original_table;
SELECT COUNT(*) FROM tmp_table;
使用MEMORY引擎可以將臨時表存儲在內存中,大大提高了統計速度。
CREATE TEMPORARY TABLE tmp_table
AS SELECT * FROM original_table
WHERE 1=0;
INSERT INTO tmp_table
SELECT * FROM original_table
WHERE condition;
SELECT COUNT(*) FROM tmp_table;
這種方法不會將所有數據都復制到臨時表中,而是先創建一個空表,然后再根據條件逐條插入符合條件的數據。雖然這種方式需要多次操作,但是整體的統計速度卻會變得更快。
下一篇mysql 臨時表優化