sql orderby破坏内部自连接查询

时间:2017-09-15 13:40:30

标签: mysql sql

我的查询在没有ORDER BY(< 1sec)的情况下工作正常。但需要大约20秒: 我在所有列上都有单列索引

   SELECT SQL_NO_CACHE * FROM file_results data
     INNER JOIN file_result_filters gender ON data.id = gender.file_result_id AND gender.filter = 'filter1' AND gender.value = 'male'
     INNER JOIN file_result_filters age ON data.id = age.file_result_id AND age.filter = 'filter2' AND age.value > 20
     INNER JOIN file_result_filters height ON data.id = height.file_result_id AND height.filter = 'filter3' AND height.value > 150
    ORDER BY age.value DESC

file_results表:

id, ...

file_result_filters:

id, file_result_id, filter, value

有趣的是,当我只有2个内部联接而不是3个

时,它可以正常工作

1 个答案:

答案 0 :(得分:1)

原因在于MySQL何时可以开始返回数据。

没有ORDER BY,MySQL可以在任何行匹配时立即开始返回数据。看起来结果很快就会出现。

使用ORDER BY,MySQL必须处理所有数据以查找所有可能的匹配项。结果不会立即返回,而是仅在ORDER BY

之后返回

当然,ORDER BY本身也需要时间,因此也会导致延迟。