我有个表,表中有个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
Mysql添加索引及索引的优缺点(https://www.cnblogs.com/51benpao/p/12791303.html)
园友 有很多总结的,
这两个字段一起做联合索引没必要吧?
试试自己添加100W数据测试下
我对数据库也不了解,不过可以给问主提供个资料。有本书叫《高性能MySQL》,里面列举了很多索引使用的技巧。