作者:苏轼\链接:https://juejin.cn/post/703007...写在之前有新同事来问我1=1有什么意思的时候,这个没意义,我笑了。今天给大家解释一下。where1=1先看一段代码selectcount(id)fromt_booktwhere1=1ANDtitle=#{title}AND作者=#{author}上面的代码很熟悉,就是查询满足条件的项目总数。在mybatis中,经常使用if标签来判断where子句后的条件,以防止第一个字段为空而导致SQL报错。没错,遇到多个查询条件的时候,使用where1=1就可以轻松解决我们条件为空的问题,那么这样写有没有问题呢?网上很多人说这样会导致性能问题,可能会使索引失效,那么今天我们来测试一下,会不会不使用索引呢?measuredtitle字段已经被索引了,我们通过EXPLAINEXPLAINSELECT*FROMt_bookWHEREtitle='andintheworld';来看一下EXPLAINSELECT*FROMt_bookWHERE1=1ANDtitle='andintheworld';对比上面两个我们会发现,possible_keys(可能用到的索引)和key(实际用到的索引)都是用来检索的。结论where1=1也会使用索引,不会影响查询效率。我们写的sql命令会被mysql解析优化成自己的处理命令。在这个过程中,会优化1=1等无意义的条件。使用explainEXTENDEDsql校对,发现where1=1等条件会被mysql优化器优化。那么我们可以在mybatis中换一种写法,因为毕竟mysql的优化器也是需要时间的。虽然去掉了索引,但是在数据量大的时候还是会有影响,所以我们推荐这样写代码:="java.lang.Integer">selectcount(*)fromt_bookttitle=#{title}ANDauthor=#{author}我们改用where标签。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.20w程序员红包封面,快拿。..5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!