因為內存儲引擎不支持TEXT和BLOB數據類型, 使用到BLOB和TEXT列的查詢和使用隱式臨時表的查詢將不得不使用MyISAM的磁盤臨時表, 即使只有很少的幾條記錄。 這可能導致很嚴重的性能開銷。即使把MySQL配置成在RAM盤上使用臨時表, 也會用到一些開銷大的系統調用(Maria存儲引擎應該能通過把所有的東西, 而不只是索引,緩存在內存中而在一定程度上緩解這個問題)。最好的解決辦法是避免使用BLOB和TEXT類型, 除非費用不可。
.
如果無法避免使用BLOB和TEXT類型, 應該能夠通過使用ORDER BY SUBSTRING(column, length)
的辦法來把這些類型的值轉化成字符串,這樣不會妨礙使用內存臨時表。另外, 確認一下的所使用的子串的長度是否短到不會導致臨時表的大小不會超過 max_heap_table_size 或 tmp_table_size, 否則,還是會生成MyISAM的磁盤臨時表。
如果EXPLAIN結果中的”Extra”列裡面包含”Using temporary”, 那麼查詢會使用一個隱式的臨時表。