我的查询在没有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个
时,它可以正常工作答案 0 :(得分:1)
原因在于MySQL何时可以开始返回数据。
没有ORDER BY
,MySQL可以在任何行匹配时立即开始返回数据。看起来结果很快就会出现。
使用ORDER BY
,MySQL必须处理所有数据以查找所有可能的匹配项。结果不会立即返回,而是仅在ORDER BY
。
当然,ORDER BY
本身也需要时间,因此也会导致延迟。