当前使用版本(必填,否则不予处理)

3.4.0

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用service层或者mapper层的getOne或者selectOne方法 条件查询。逻辑删除字段会排列在第一个查询条件,影响联合索引。

经过测试和阅读源码。query() 方法传入实体对象时候其实体对象的条件会拼接在逻辑删除字段前,若后续继续使用流式编程方式添加条件就会拼接在逻辑删除字段之后

重现步骤(如果有就写完整)

使用service层或者mapper层的getOne或者selectOne方法 条件查询。逻辑删除字段会排列在第一个查询条件,影响联合索引。

报错信息

程序未报错,性能有影响 MyBatis-Plus 条件查询。逻辑删除字段会排列在第一个查询条件,影响联合索引效率

Comment From: wolfeke

你用的啥数据库,一般是不会影响的,数据库的查询优化器,会自动优化。

Comment From: peizhsjtu

我也发现了这个问题。。。可以修复一下嘛,把逻辑删除放在后面,不然的话相当于全表搜索了

Comment From: qmdx

我也发现了这个问题。。。可以修复一下嘛,把逻辑删除放在后面,不然的话相当于全表搜索了

数据库引擎会自动优化的,这个地方顺序不支持自动调整最后,会影响 wrapper 的自定义 sql

Comment From: kun1988

我也发现了这个问题。。。可以修复一下嘛,把逻辑删除放在后面,不然的话相当于全表搜索了

数据库引擎会自动优化的,这个地方顺序不支持自动调整最后,会影响 wrapper 的自定义 sql

这个问题影响是比较大,比如我启用了IllegalSQLInnerInterceptor,然后检测就会通不过,说我没有走索引,逻辑删除的查询条件是应该放最后吧,没有办法解决吗? @qmdx