在MySQL中,如果没有filesort,表中是否可以有TEXT/BLOB列?

在MySQL中,如果没有filesort,表中是否可以有TEXT/BLOB列?,mysql,indexing,Mysql,Indexing,我正在开发一个数据库程序,我注意到当我对包含TEXT/BLOB列的表进行查询时,MySQL将使用temp表和filesort。我不完全确定这是什么时候发生的以及如何发生的,但是有没有MySQL在存在BLOB/TEXT列时不使用filesort的情况?例如,如果排序列的类型为VARCHAR(),并带有索引?如果必须对VARCHAR进行排序,并且如果结果中必须包含文本或blob列,则MySQL将执行文件排序,即使您在该VARCHAR上有索引。只有当要检索的所有列都存在于覆盖索引中时,才能避免文件排序

我正在开发一个数据库程序,我注意到当我对包含TEXT/BLOB列的表进行查询时,MySQL将使用temp表和filesort。我不完全确定这是什么时候发生的以及如何发生的,但是有没有MySQL在存在BLOB/TEXT列时不使用filesort的情况?例如,如果排序列的类型为VARCHAR(),并带有索引?

如果必须对VARCHAR进行排序,并且如果结果中必须包含文本或blob列,则MySQL将执行文件排序,即使您在该VARCHAR上有索引。只有当要检索的所有列都存在于覆盖索引中时,才能避免文件排序。在这种情况下,没有将文本列添加到索引的最佳方法


最好的方法之一是将表水平拆分为两个,第二个表只包含text/blob列。这样,就可以使用索引对第一个表进行排序,然后对第二个表执行联接。

这值得吗?我的意思是将两列放在一个单独的表中,在查询中需要时使用JOIN来获取值。这值得争论吗?我在所有情况下都能获得性能吗?你会感到惊讶: