mysql怎么对这个语句优化

一个多对多的表的查询优化
r表 b表为中间表 c表

select
r.*
from r
where 1=1
and 3 in (SELECT b.cid FROM b where r.id = b.rid)
and 2 in (SELECT b.cid FROM b where r.id = b.rid)

怎么对(SELECT b.cid FROM b where r.id = b.rid)这个语句优化那
如果取并集的话,下面这条语句就解决了,但是我想要的是交集
select
r.*
from r
where 1=1
and r.id in(select distinct r.id from r,b where b.rid=r.id and b.cid in(2,3));

如何查看mysql语句的优化结果
MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语句

1,slow_query_log
这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。

2,long_query_time
当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。

3,slow_query_log_file
记录日志的文件名。

4,log_queries_not_using_indexes
这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-06-01
select r.*
from r, b
where r.id = b.rid
and (b.cid = 2 or b.cid = 3)
相似回答