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是避免不了的。


2

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程