直接上sql语句:
SELECT *FROM production_input WHERE id in
(
SELECT input_id FROM production_farming_input WHERE farming_id
in
(
SELECT farming_id FROM production_archi_farming WHERE archi_id =
#{traceProductionInput.archiId}
)
)
mysql是笨笨嘛两个in自己就不会优化了吗
数据才几百条左右就要查3-4秒
备注所有表唯一主键名称为id
麻烦大佬分析一波 给给指导建议
input_id farming_id archi_id 设置上索引,一定会改善的。
使用inner join关联表 再给几个id加索引 注意如果表和表join的时候如果不是一对一关联的情况下,会有重复数据需要对结果另外处理一下。
innerj join 比单传的where .. in快 在可以加一个索引
加上索引之后试试这个 SELECT c.* FROM production_input c,(SELECT a.input_id FROM production_farming_input a,production_archi_farming b WHERE a.input_id = b.archi_id and b.archi_id = #{traceProductionInput.archiId}) WHERE c.production_input = a.input_id
SELECT c.* FROM production_archi_farming a
left join production_farming_input b on a.farming_id=b.farming_id
left join production_input c on c.id = b.farming_id
WHERE a.archi_id = #{traceProductionInput.archiId}