首页 新闻 赞助 找找看

mysql设置RecordTime和Deleted字段要如何设置索引

0
悬赏园豆:15 [已解决问题] 解决于 2022-09-15 16:32

我有个表,表中有个RecordTime来记录时间,Deleted来记录数据是否被删除,查询语句一般都会有RecordTime>'20xx-xx-xx' and Deleted=0,按照我匮乏的mysql知识,我设置了个RecordTime_Deleted的联合索引,测试也能命中索引,但是我总觉得有点不对劲,我记得有个说法是mysql只要是范围查询,索引就会失效?RecordTime肯定会range的,但是索引并没有失效啊,是后面的Deleted失效吗,那么我是不是就不用加Deleted字段了,但是如果符合RecordTime的数据有几万条,Deleted=0的数据可能只有几十条,感觉不设置Deleted很血亏,我又依稀记得mysql好像不建议将Deleted这种数据差异不大的字段(Deleted只有0和1)设置成索引,有这么回事吗,我知道mysql的索引是b+,我对这个不是和了解,理论上应该也是二叉树吧,如果是二叉树的话,Deleted设置索引设置索引不是应该收益巨大吗,请大佬们指点下

问题补充:

RecordTime_Deleted索引在查询 RecordTime>'20xx-xx-xx' and Deleted=0 的时候,范围查询确实会导致后面的Deleted=0失效,如果修改索引,将Deleted放在前面Deleted——RecordTime就能完美命中索引
但是,Deleted是要从0改成1的,每次更改,貌似都需要重构索引,这样是不是很伤

研究了一段时间,最后决定用Deleted_RecodrdTime联合索引了,因为这个表Deleted 0和1的比率大概是1:99,更新的话,最多也就更新一次,所以必须要弄个Deleted

WmW的主页 WmW | 菜鸟二级 | 园豆:424
提问于:2022-09-08 11:19
< >
分享
最佳答案
0

Mysql添加索引及索引的优缺点(https://www.cnblogs.com/51benpao/p/12791303.html)
园友 有很多总结的,

这两个字段一起做联合索引没必要吧?

试试自己添加100W数据测试下

收获园豆:10
快乐的凡人721 | 老鸟四级 |园豆:3913 | 2022-09-08 11:35
其他回答(1)
0

我对数据库也不了解,不过可以给问主提供个资料。有本书叫《高性能MySQL》,里面列举了很多索引使用的技巧。

收获园豆:5
会长 | 园豆:12401 (专家六级) | 2022-09-08 11:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册