规约原文
【强制】在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。
说明:1)增加查询分析器解析成本。2)增减字段容易与resultMap配置不一致。
问题描述
我认为这条规约不合理。
- 查询分析器指的是explain嘛?如果是expalin,这个只在查询sql执行计划时会用到,不是我们正常开发会用到的操作,不应该作为禁止的理由。
- 正常操作中,不太应该有减字段这个操作,这是很危险的,危险操作应该禁止,而不是作为规范设定的理由。
- resultMap配置,现在mybatis之类的组件都可以和数据库model的字段自动匹配Map上,不太需要自己去手写的,所以这个作为理由感觉不充分。
修改建议
我认为在普遍情况下,出于开发、复用的成本考虑,都应当是默认查询所有数据库表字段。
只有在涉及性能优化时,根据where条件加索引还无法满足需求时,才进一步考虑写明字段,以减少io和覆盖索引。
出于方便的考虑,使用 * 作为查询字段列表,是合理且高效的。
3条答案
按热度按时间t2a7ltrp1#
查询解析器指的是这个
bfhwhh0e2#
ps:
bejyjqdl3#
ps:
是的,首先第一点我觉得你说的没错,既然你已选择查询所有的字段,那就没有必要把所有的字段写出来,直接用*代替会清晰明了很多,其次第二点我觉得也没问题,查询解析器的成本确实很低,可以忽略不计了,不然也不会有这个语法的出现,可能是对于这方面过于苛刻过于精益求精了。但是我想说的是,阿里规约是阿里规约,并不是每个人都要遵守,这个东西本来就是仁者见仁智者见智的事情,就好像写代码时有人觉得花括号需要另起一行,有的人觉得写在行尾好一点一样。这只不过是统一标准统一口径罢了,没必要过度深究,毕竟一千个读者就会有一千个哈姆雷特,如果是个人项目的开发,自己写的开心就好了,如果是团队开发,那总要有一个人制定标准,其他人遵守标准,仅此而已。