当前位置: 首页 > 后端技术 > Java

新同事问我where1=1是什么意思

时间:2023-04-02 01:34:06 Java

写在来的新同事面前问我where1=1是什么意思,这个没意义,我笑了。今天给大家解释一下。where1=1先看一段代码selectcount(id)fromt_booktwhere1=1ANDtitle=#{title}ANDauthor=#{author}上面的代码很熟悉,就是查询满足条件的项目总数。在mybatis中,经常使用if标签来判断where子句后的条件,以防止第一个字段为空而导致SQL报错。没错,遇到多个查询条件的时候,使用where1=1就可以轻松解决我们条件为空的问题,那么这样写有没有问题呢?网上很多人说这样会导致性能问题,可能会使索引失效,那么今天我们来测试一下,会不会不使用索引呢?标题字段已被索引。让我们通过EXPLAINtitle='Andintheworld'来看EXPLAINSELECT*FROMt_bookWHERE;EXPLAINSELECT*FROMt_bookWHERE1=1ANDtitle='Andintheworld';对比上面两个,我们会发现可以看到possible_keys(可能使用的索引)和key(实际使用的索引)都是使用索引进行检索。结论where1=1也会使用索引,不会影响查询效率。我们写的sql命令会被mysql解析优化成自己的处理命令。在这个过程中,会优化1=1等无意义的条件。使用explainEXTENDEDsql校对,发现where1=1等条件会被mysql优化器优化。那么我们可以在mybatis中换一种写法,因为毕竟mysql的优化器也是需要时间的。虽然去掉了索引,但是在数据量大的时候还是会有影响,所以我们推荐这样写代码:selectcount(*)fromt_bookttitle=#{title}ANDauthor=#{author}我们改用where标签。泛音感谢您的阅读。如果觉得自己有所收获,可以点赞关注。也欢迎大家有问题,让我们在下方评论交流!