You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中使用SELECT *是否存在效率低、指代不明确的问题?

关于MySQL SELECT * 用法的问题解答

你对SELECT *的理解是正确的,它仅返回FROM关键字后指定的单张/多张关联表的所有列,不会跨schema抓取其他无关表的数据。以下是对你的几个疑问的对应说明:

  • 效率问题确实存在:如果表中包含你实际不需要的大字段(如TEXT、BLOB、长VARCHAR类型),SELECT *会强制读取并返回这些内容,大幅提升数据传输、内存占用的开销。即便没有大字段,多余列的返回也会让覆盖索引失效,本来可以直接从索引中取数完成的查询,必须回表读取完整行数据,查询性能会出现数倍甚至数十倍的下降,数据库体量越大,这类额外开销的影响越明显。
  • 指代模糊的问题同样存在:多表关联查询时,如果多张表存在同名字段(如id、create_time等通用字段),SELECT *返回的结果会出现重复列名,不仅容易导致后续业务代码取值出错,还会提升排查问题的成本。如果后续表结构发生变更(新增、删除列),使用SELECT *的查询不会提前抛出语法错误,很容易引发隐蔽的业务逻辑bug。
  • 绝大多数场景下都建议明确指定查询列:除非你确实需要用到目标表的全部字段,否则都建议显式写出需要的列名,关联查询时还可以给表设置别名,列名前统一加上别名前缀,进一步提升语句的可读性和可维护性。你给出的示例中如果仅需要用到order_id、unit_price、quantity三个字段,可以改写为如下写法,性能和可维护性都更好:
SELECT order_id, unit_price, quantity
FROM order_items
WHERE order_id = 6 AND unit_price*quantity > 30

内容的提问来源于stack exchange,提问作者user11838329

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:06:04