首页 新闻 会员 周边 捐助

mysql 联合索引能这么查吗

0
悬赏园豆:15 [已解决问题] 解决于 2022-06-24 10:23

我给一个表建立了一个联合索引 Time,Deleted,UserID
其中Time是数据的时间点,最经常用到,所以放在了最左边
Deleted是删除标识,大部分时间用到放在了第二位
UserID是用户ID,放在了第三位

我有个特殊需求,就是要把未删除的删除的都查询出来,能不能这样写啊

where Time>=?st and Time<?et and (Deleted=0 OR Deleted=1) and UserID=?UserID

这样是不是就能命中Time,Deleted,UserID全部3部分了

WmW的主页 WmW | 菜鸟二级 | 园豆:424
提问于:2022-05-26 15:34
< >
分享
最佳答案
0

建议用explain试试

收获园豆:10
会长 | 专家六级 |园豆:12463 | 2022-05-30 20:10

用了explain试了,能引用索引,
但是我记得之前好像说即使查询索引,只要用到or,也会导致无法命中索引,
我现在有点凌乱,不知道是什么情况了
而且我的联合索引是 Time,Deleted,UserID,查询的时候肯定会用到最左Time的,所以肯定会命中这个索引,看不出来有没有使用Deleted

WmW | 园豆:424 (菜鸟二级) | 2022-05-31 08:58

@WmW: 你说的有道理。题外话:deleted这种区分度不高的属性上加索引效果好吗?另外我看了你的例子有个疑问,既然删除的不删除的都查,为什么不直接把索引加了time和user上,然后这样查:select * from t where time xxx and user xxx

我觉得不用在delete上加,就加了time和user上吧

会长 | 园豆:12463 (专家六级) | 2022-05-31 10:52
其他回答(1)
0

只命中Time字段,explain 可以看得出,还有,delete字段加索引,没什么用

收获园豆:5
明日小路 | 园豆:466 (菜鸟二级) | 2022-06-02 17:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册