PHP & MySQL 网络应用程序 - 从 table 选择单个字段 (vs) select *

PHP & MySQL web app - Selecting a single field (vs) select * from table

我正在努力将原型 Web 应用程序转换为可以部署的东西。在某些位置,原型查询 select 来自 table 的所有字段,尽管只需要一个字段或查询仅用于检查记录的存在。大多数情况是单行查询。

我正在考虑将这些查询更改为只获取真正相关内容的查询,即:

select * from users_table where <some condition>

select name from users_table where <some condition>

我有几个问题:

  1. 总体而言,这是值得优化的吗?
  2. 这种变化在哪种查询中可能特别好?例如,这会改进涉及 joins 的查询吗?
  3. 除了SQL的影响之外,这个改动对PHP的水平有好处吗?例如,返回的数组将更小(单列与多列数据)。

感谢您的评论。

如果我要用一个词来回答你所有的三个问题,我肯定会说

您可能想要的不仅仅是 "Yes"...

  • SELECT *是"bad practice":如果将结果读入PHP非关联数组;然后添加一列;现在数组下标可能已更改。
  • 如果 WHERE 足够复杂,或者你有 GROUP BYORDER BY,并且优化器决定构建一个 tmp table,那么 * 可能导致一些低效率:必须使用MyISAM而不是MEMORY; tmp table 会更笨重;等等
  • EXISTS SELECT * FROM ... 返回 0 或 1——更简单。
  • 您可以将 EXISTS(或 suitable 等效 JOIN)与其他查询结合使用,从而避免额外的服务器往返。