如何定义SQL中的昂贵操作?是否需始终避免此类操作?
SQL中的“昂贵操作”:是否必须始终避免?
你的理解是对的——在只需要用户id的场景下,执行select * from table where age > 18里的select *确实属于“昂贵操作”:它会读取表中所有列的数据,额外增加磁盘IO、内存占用和网络传输量,甚至可能因为无法利用覆盖索引进一步降低查询效率。
但“昂贵操作”并非必须始终避免,得结合具体场景判断:
- 开发调试阶段:用
select *可以快速查看全量数据结构或样本数据,省去逐个列名的麻烦,这时候便利性远大于性能损耗,完全没问题。 - 小表场景:比如只有几十条数据的配置表,
select *和指定列查询的性能差异微乎其微,没必要为了一点点性能去维护列名列表。 - 非核心低并发场景:如果某个查询的调用量极低,哪怕有额外开销,也不会对系统整体性能造成影响,这种情况下也不用刻意优化。
当然,在生产环境的核心业务查询、大表查询、高并发场景下,必须尽量避免不必要的昂贵操作——因为这类场景下,一点点额外开销被放大后,会直接影响系统响应速度和稳定性。
本质上,“昂贵操作”的核心是超出业务需求的资源消耗,判断要不要避免的标准是:当前操作的资源开销是否和业务需求匹配,以及带来的收益是否大于成本。
内容的提问来源于stack exchange,提问作者pupupyguy
相关产品推荐
相关产品推荐

