我想重写我的MySQL查询,以便在\u集中查找\u不会执行完整的表扫描,除非必要

我想重写我的MySQL查询,以便在\u集中查找\u不会执行完整的表扫描,除非必要,mysql,join,group-by,group-concat,find-in-set,Mysql,Join,Group By,Group Concat,Find In Set,我想重写我的MySQL查询,以便最后一个表连接不会执行完整的表扫描,除非必要。table1.csv是一个varchar字段,包含与table2的join_id列相关的逗号分隔id。我只想调用FIND_IN_SET,当table2在第一次联接中未联接到table1,并且table1的csv列不是空字符串时,FIND_IN_SET执行完整的表扫描 SELECT table1.id, table1.csv, GROUP_CONCAT(`unlocked`.join_id) AS `list` FROM

我想重写我的MySQL查询,以便最后一个表连接不会执行完整的表扫描,除非必要。table1.csv是一个varchar字段,包含与table2的join_id列相关的逗号分隔id。我只想调用FIND_IN_SET,当table2在第一次联接中未联接到table1,并且table1的csv列不是空字符串时,FIND_IN_SET执行完整的表扫描

SELECT table1.id, table1.csv, GROUP_CONCAT(`unlocked`.join_id)
AS `list` FROM table1 LEFT JOIN table2 ON table1.id=table2.join_id
LEFT JOIN table2 `unlocked` ON table2.join_id IS NULL AND table1.csv<>'' AND
FIND_IN_SET(`unlocked`.join_id, table1.csv) WHERE table1.id IN ([comma separated values])
GROUP BY table1.id

您可能需要考虑在这一主题范围内询问这个主题:似乎是在高级查询下,包括窗口功能、动态SQL和查询性能。我做到了。