2哥 :3妹,今天怎么下班这么晚啊。
3妹:嗨,别提了,今天线上出bug了, 排查了好久。
2哥:啊,什么问题呀?
3妹:我们内部的一个管理系统报错了, 最近排查下来是mybatis报的错。 背景是这样的:
这个系统的功能比较简单,就是从DB查询用户,并列表展示,用了1年了,都没什么问题。mybatis查询sql是这样的:
select id, name, age from user_info where name = #{name} select id, name, age from user_info where 1=1 AND name = #{name} 字段deleted, 一是删除可以软删除, 二是在where最前面加上deleted=0, 这样比加1=1更优雅,也更意义。 select id, name, age from user_info where deleted=0 AND name = #{name} 索引,影响查询性能。那我们来测试下吧:name字段为索引字段,sql1: EXPLAIN SELECT * FROM user_info WHERE name='张三'; sql2: EXPLAIN SELECT * FROM user_info WHERE 1=1 AND name='张三'; 通过对比上面两种sql输出结果可以看到possible_keys 和 key都使用到了索引进行检索。 结论:where 1=1 也会走索引,不影响查询效率。 3妹: 我还是在表里增加deleted吧,这样更优雅一些,还可以软删除,一举两得~
select id, name, age from user_info where deleted=0 AND name = #{name} 索引,影响查询性能。那我们来测试下吧:name字段为索引字段,sql1: EXPLAIN SELECT * FROM user_info WHERE name='张三'; sql2: EXPLAIN SELECT * FROM user_info WHERE 1=1 AND name='张三'; 通过对比上面两种sql输出结果可以看到possible_keys 和 key都使用到了索引进行检索。 结论:where 1=1 也会走索引,不影响查询效率。 3妹: 我还是在表里增加deleted吧,这样更优雅一些,还可以软删除,一举两得~
name字段为索引字段,
sql1:
EXPLAIN SELECT * FROM user_info WHERE name='张三';
sql2:
EXPLAIN SELECT * FROM user_info WHERE 1=1 AND name='张三';
通过对比上面两种sql输出结果可以看到possible_keys 和 key都使用到了索引进行检索。
结论:where 1=1 也会走索引,不影响查询效率。
3妹: 我还是在表里增加deleted吧,这样更优雅一些,还可以软删除,一举两得~
上一篇:sql中的替换函数replace()总结
下一篇:【腾讯云TDSQL-C Serverless 产品体验】新时代数据库大杀器