where 1=1的问题
来源:1-5 EXPLAIN详解(使用、可视化、扩展与性能计算公式)
大老李
2020-09-11 19:34:42
你好,只有大家都说在实际开发中会用到 where 1=1 再加上实际的字段查询这种写法很不好,看了你视频,了解到最左原则之后,我的理解是,因为这样会导致索引失效,但是在实际的sql分析中,还是用上索引的。这种写法还是不提倡的么?
1回答
大目
2020-09-12
您好,您应该对最左前缀原则理解有误。
最左前缀原则,指的是where子句中出现的字段,要在索引的左列中出现。
并不是说where条件中出现的顺序,也得符合索引从左到右的顺序。
举个例子 :
有索引index(a,b)
那么where a=x and b=y可以用上这个索引;
whre b=y and a=x也可以用上这个索引。
因为从where条件来看,这两个where子句都用到了a、b两个字段。
====
但where b=x 用不了索引,因为b字段在索引的左侧是a,而你的where条件中没有出现a的条件。
=====
综上,1=1并不会导致索引失效。此外,能否贴下
只有大家都说在实际开发中会用到 where 1=1 再加上实际的字段查询这种写法很不好,看了你视频
这个言论的上下文?我相信作者说这个话是有背景的。
如果使用的mybatis,那么确实不建议用1=1,因为mybatis有 <where> <where> 去实现动态的条件查询;但如果你使用的jdbcTemplate之类的框架,那有些时候1=1是避免不了的。
相似问题
回答 1
回答 1