做外贸 英文网站,厦门住房建设局网站首页,论坛企业推广,网站建设 注意事项昨天偶然看见一篇文章#xff0c;提到说如果在mysql查询语句中#xff0c;使用where 11会有性能问题#xff1f;#xff1f;
这着实把我吸引了#xff0c;因为我项目中就有不少同事#xff0c;包括我自己也有这样写的。为了不给其他人挖坑#xff0c;赶紧学习一下…昨天偶然看见一篇文章提到说如果在mysql查询语句中使用where 11会有性能问题
这着实把我吸引了因为我项目中就有不少同事包括我自己也有这样写的。为了不给其他人挖坑赶紧学习一下这样写sql到底有没有性能问题
where 11的使用场景
我们来看下where 11实际是怎么使用的 先来看一段SQL
select idselectCmsCourseList parameterTypejava.util.Map resultMapCourseMapSELECTa.id,a.category_id,a.model_id,b.*FROMcms_content aLEFT JOIN cms_course b ON a.id b.idWHERE 11if testcourseName ! null and courseName ! AND b.course_name like concat(concat(%,#{courseName}),%)/ifif testdisabled ! nullAND a.disabled #{disabled}/ifif testcategoryId ! nullAND a.category_id #{categoryId}/if
/select如果用过mybatis的童鞋看到这段代码应该很熟悉了吧这里使用where 11的作用就是为了方便后面的条件能通过if判断使用AND连接起来这样即使后面if全部是false没有参数这个sql也不会报错。
where 11的替换方案
其实上面的这个写法如果用mybatis完全可以用where标签来替换,如
select idselectCmsCourseList parameterTypejava.util.Map resultMapCourseMapSELECTa.id,a.category_id,a.model_id,b.*FROMcms_content aLEFT JOIN cms_course b ON a.id b.idwhereif testcourseName ! null and courseName ! AND b.course_name like concat(concat(%,#{courseName}),%)/ifif testdisabled ! nullAND a.disabled #{disabled}/ifif testcategoryId ! nullAND a.category_id #{categoryId}/if/where
/select如果你使用了这个写法就不存在11的问题了所以也不用纠结但本着打破砂锅问到底的精神我们还是得探究一下使用11到底有没有性能问题
使用where 11有性能问题吗
先来问问AI 可以看到AI给到的答复是基本没有性能问题更多的是代码风格和可读性
亲自检测
为了跟进一步测试我们来写个SQL看看实际性能是否有差别 explain select * from user; explain select * from user where 11; explain select * from user where id 8; explain select * from user where 11 and id 8; 可以看到示例1和示例2 示例3和示例4这两组写法都是有个11的区别但性能都是一样的因此我们基本可以判定这个写法对性能是没有影响的。
总结
如果你在项目中也有使用where 11写的SQL如果从可读性或者代码风格考虑建议优化掉但如果担心性能问题则大可不必过多考虑~