mysql同表,flag只有两个值,要求查出值 flag1存在,flag2不存在的数据?

新手上路,请多包涵

表数据较大,大约一百万条。目前思路是左连接,但会走全表查询,速度很慢

select
    si1.*
from
    service_info si1
    left outer join service_info si2 on
    si1.service_id = si2.service_id
where
    si1.flag= 'flag1'
    and si2 .serial_id is null;

请问有没有什么更快的解决方法或思路?目前仅使用 sql 查询,不做其他例如分区表或分表操作。

阅读 1.5k
1 个回答

你可以了解一下explain,使用explain查看执行计划,按照反馈进行优化,不过从你的sql 可以大概给一下建议:像si2 .serial_id
可以设置0为默认值并且增加索引,这样查找就不需要使用is null 进行查找,而si1.flag 如果是只有两个值的话,索引可加可不加吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题