2010-04-03 39 views
0

我工作的一個數據庫程序,我注意到,當我在做查詢與具有TEXT/BLOB列的表,MySQL將使用臨時表和文件排序使用。我不能完全確定何時以及如何發生這種情況,但那裏有當有BLOB/TEXT列MySQL不使用文件排序的情況?就像如果排序列是帶有索引的VARCHAR()類型?在MySQL中沒有filesort的情況下,表中可以有TEXT/BLOB列嗎?

回答

1

如果排序,必須對VARCHAR完成,如果文本或BLOB列必須列入結果,那麼MySQL會做一個文件排序,即使你有對VARCHAR的索引。只有在您覆蓋的索引中存在所有正在進行檢索的列時才能避免使用文件夾。在這種情況下,沒有最佳方式將文本列添加到索引。

一個最好的方法是水平分割表分成兩個和第二表只是包含文本/ BLOB列。這樣,可以使用索引在第一個表上完成排序,然後使用第二個表執行聯接。

+0

這是值得?我的意思是將兩列放在單獨的表中,在查詢中使用JOIN獲取需要的值。這是值得的麻煩,我在所有情況下獲得表現嗎? – Tower 2010-04-03 16:16:53

+0

是的,這是值得的。請看我編輯的答案。 – Nirmal 2010-04-03 16:18:52

+0

你會驚奇地發現:http://stackoverflow.com/questions/13179308/why-doesnt-mysql-use-the-primary-key-on-join-plus-order – Gutza 2012-11-01 17:10:53

相關問題