BLOB和TEXT

區別:spa

BLOB存儲的是二進制數據,沒有排序規則或字符集。排序

TEXT存儲的是字符,有排序規則和字符集。內存

由於Memory引擎不支持BLOB和TEXT類型,最好的解決方案避免使用BLOB和TEXT類型。若是實在沒法避免,通常是在所用到的BLOB字段的地方都使用substring(列名,長度),將字符串

列值轉換爲字符串(在ORDER BY子句中也能夠適用),這樣就能夠使用內存臨時表了。但要確保截取的字符串足夠短,不會使臨時表的大小超過max_heap_table_size或tmp_table_size,超過之後MySQL會將內存臨時錶轉換爲MyISAM磁盤臨時表。string

 

如:table

有一個表有1000W行的數據,佔用5G的磁盤空間。其中有一個utf8字符集的VARCHAR(1000)列。每一個字符最多使用3個字節,最壞狀況下須要3000字節的空間。二進制

若是在ORDER BY中用到這個列,而且查詢掃描整個表,爲了排序就須要超過30GB的臨時表。數據

若是Explain執行計劃的Extra列包含「Using temporary」,則說明查詢使用了隱式臨時表。查詢

相關文章
相關標籤/搜索