MYSQL 磁碟暫存資料表和檔案排序

來源:互聯網
上載者:User

標籤:

  因為Memory引擎不支援BOLB和TEXT類型,所以,如果查詢使用了BLOB或TEXT列並且需要使用隱式暫存資料表,將不得不使用MyISAM磁碟暫存資料表,即使只有幾行資料也是如此。

  這會導致嚴重的效能開銷。。即使配置Mysql將暫存資料表儲存在記憶體塊裝置上(ram-disk),依然需要很多昂貴的系統調用。

  最好的解決方案是盡量避免使用BLOB和TEXT類型。如果實在無法避免,有一個技巧是在所有用到BLOG欄位的地方都使用SUBSTRING(culumn,length)將列值轉換為字串(在order by 子句中也適用),這樣就可以使用記憶體暫存資料表了。但是要確保截取的字串足夠短,不會使暫存資料表的大小超過max_heap_table_size或temp_table_size,超過以後,mysql會將記憶體暫存資料表轉換為myisam 磁碟暫存資料表。

  最壞情況下的長度分配對於排序的時候也是一樣的,所以這一招對於記憶體中建立大暫存資料表和檔案排序,以及在磁碟上建立大暫存資料表和檔案排序這兩種情況都很有協助。

  例如,假設有一個1000W行的表,佔用了幾個GB的磁碟空間。其中有一個utf-8字元集的varchar(1000)列每個字元最多使用3個位元組,最壞情況下需要3000位元組的空間。如果ORDER BY 中用到了這個列,並且查詢掃描了整個表,為了排序就需要超過30Gb的暫存資料表。

  如果EXPLAIN執行計畫的EXTRA列包含‘Using temporary’,則說明這個查詢使用了隱士暫存資料表。

MYSQL 磁碟暫存資料表和檔案排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.