如何才能让索引不失效

由于IN会使索引失效,有可以替换IN的其它函数和方法吗?

目前我能想到的是把

select * from A where ${if(len(city)==0,""," city in( '"+city+"')")} 

select * from A where city in ('成都','绵阳','自贡','南充','达州','乐山')

转换成这样:

select * from A where city = '成都' or city = '绵阳' or city = '自贡' or city = '南充' or city = '达州' or city = '乐山' 

但是如果OR不是争对于一个字段,也会索引失效;

如果select * from A where city = '成都' or city = '绵阳' or name= '自贡' 

OR引起的索引失效(特殊情况下:即不是同一个索引字段)
NOT IN、NOT EXISTS导致索引失效

我想要实现IN的功能,还有什么办法呢?

wangqiaofeng 发布于 2020-12-21 15:08 (编辑于 2020-12-21 15:36)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
shirokoLv6资深互助
发布于2021-7-2 08:30(编辑于 2021-7-2 09:56)

select * from A where city = '成都' or city = '绵阳' 

UNION 

select * from A where name= '自贡' 

https://www.cnblogs.com/interdrp/p/10727374.html

最佳回答
0
ScyalcireLv7中级互助
发布于2020-12-21 15:14(编辑于 2020-12-21 16:22)

https://help.fanruan.com/finereport/doc-view-2066.html

突然翻到这个文档,你看下能否解决你的问题

  • wangqiaofeng wangqiaofeng(提问者) 可以替换成or,但是不同的字段or还是会导致索引失效,还是想找到其它方法让索引不失效
    2020-12-22 18:12 
最佳回答
0
krystal033Lv7高级互助
发布于2021-7-2 08:25
select * from A where (city = '成都' or city = '绵阳' or city = '自贡' or city = '南充' or city = '达州' or city = '乐山')

加个括号试试

  • 4关注人数
  • 508浏览人数
  • 最后回答于:2021-7-2 09:56
    请选择关闭问题的原因
    确定 取消
    返回顶部