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>
我有几个问题:
- 总体而言,这是值得优化的吗?
- 这种变化在哪种查询中可能特别好?例如,这会改进涉及 joins 的查询吗?
- 除了SQL的影响之外,这个改动对PHP的水平有好处吗?例如,返回的数组将更小(单列与多列数据)。
感谢您的评论。
如果我要用一个词来回答你所有的三个问题,我肯定会说是。
您可能想要的不仅仅是 "Yes"...
SELECT *
是"bad practice":如果将结果读入PHP非关联数组;然后添加一列;现在数组下标可能已更改。
- 如果
WHERE
足够复杂,或者你有 GROUP BY
或 ORDER BY
,并且优化器决定构建一个 tmp table,那么 *
可能导致一些低效率:必须使用MyISAM
而不是MEMORY
; tmp table 会更笨重;等等
EXISTS SELECT * FROM ...
返回 0 或 1——更简单。
- 您可以将
EXISTS
(或 suitable 等效 JOIN
)与其他查询结合使用,从而避免额外的服务器往返。
我正在努力将原型 Web 应用程序转换为可以部署的东西。在某些位置,原型查询 select 来自 table 的所有字段,尽管只需要一个字段或查询仅用于检查记录的存在。大多数情况是单行查询。
我正在考虑将这些查询更改为只获取真正相关内容的查询,即:
select * from users_table where <some condition>
对
select name from users_table where <some condition>
我有几个问题:
- 总体而言,这是值得优化的吗?
- 这种变化在哪种查询中可能特别好?例如,这会改进涉及 joins 的查询吗?
- 除了SQL的影响之外,这个改动对PHP的水平有好处吗?例如,返回的数组将更小(单列与多列数据)。
感谢您的评论。
如果我要用一个词来回答你所有的三个问题,我肯定会说是。
您可能想要的不仅仅是 "Yes"...
SELECT *
是"bad practice":如果将结果读入PHP非关联数组;然后添加一列;现在数组下标可能已更改。- 如果
WHERE
足够复杂,或者你有GROUP BY
或ORDER BY
,并且优化器决定构建一个 tmp table,那么*
可能导致一些低效率:必须使用MyISAM
而不是MEMORY
; tmp table 会更笨重;等等 EXISTS SELECT * FROM ...
返回 0 或 1——更简单。- 您可以将
EXISTS
(或 suitable 等效JOIN
)与其他查询结合使用,从而避免额外的服务器往返。