我正在研究一个数据库程序,我注意到当我对具有TEXT / BLOB列的表进行查询时,MySQL将使用临时表并使用filesort。我不完全确定何时以及如何发生这种情况,但是当存在BLOB / TEXT列时,MySQL是否存在不使用filesort的情况?就像sort列是带索引的VARCHAR()类型一样?
答案 0 :(得分:1)
如果必须在varchar上进行排序,并且如果必须在结果中包含text或blob列,那么即使你在该varchar上有索引,MySQL也会执行一个文件排序。只有当您正在检索的所有列都存在于覆盖索引中时,才能避免使用文件排序。在这种情况下,没有将文本列添加到索引的最佳方法。
最好的方法之一是将表格水平分割为两个,第二个表格只包含text / blob列。这样,可以使用索引在第一个表上完成排序,然后使用第二个表执行连接。