从MySQL检索数据时始终使用SELECT*可以吗?

从MySQL检索数据时始终使用SELECT*可以吗?,mysql,sql-server,database,Mysql,Sql Server,Database,即使从MySQL检索数据时只需要一列,也可以始终使用SELECT*吗?它会影响查询的速度还是系统的速度?谢谢。不,它并不总是好的 但这也不总是一个问题 按照性能影响的顺序: 如果只选择列的子集,则会对访问路径产生积极影响。也许可以从索引中读取这些列,而不必接触表 除此之外,还有原始网络I/O。发送三列比发送三百行(尤其是许多行)占用的带宽要少得多 除此之外,客户端应用程序还需要内存来处理结果集。我认为select中的列是查询中时间/CPU占用最少的部分。通过“WHERE”子句或显式使用“LIMI

即使从MySQL检索数据时只需要一列,也可以始终使用SELECT*吗?它会影响查询的速度还是系统的速度?谢谢。

不,它并不总是好的

但这也不总是一个问题

按照性能影响的顺序:

如果只选择列的子集,则会对访问路径产生积极影响。也许可以从索引中读取这些列,而不必接触表

除此之外,还有原始网络I/O。发送三列比发送三百行(尤其是许多行)占用的带宽要少得多


除此之外,客户端应用程序还需要内存来处理结果集。

我认为select中的列是查询中时间/CPU占用最少的部分。通过“WHERE”子句或显式使用“LIMIT”限制行数可以节省时间

根据我个人的经验,你应该尽可能地选择命名列而不是
SELECT*

但是,性能不是关键原因

  • 使用SELECT*的代码通常更难阅读和调试,因为它不明确查询的意图

  • 当数据库结构更改时,使用SELECT*的代码可能会中断(按索引而不是按名称引用列几乎总是编写代码的错误方法)

  • 最后,检索更大的数据集确实会影响速度、带宽和内存消耗,如果可以轻松避免的话,这是不可取的

就性能而言,
JOIN
s和行计数比所选列中的差异更有可能降低查询性能,但效率低下的习惯会在以后的项目中加剧。也就是说,测试台应用程序可能没有性能问题,但当事情扩展时,或者数据只能通过有限的网络带宽访问时,您会很高兴从编写显式选择开始


注意,如果你只写一个查询来检查一些数据,我不会担心,但是如果你为一个经常被执行的代码库写一个查询,写好的查询是值得的,并且在必要的时候考虑存储过程。然而,我认为这只是懒惰。只选择您需要的数据。@JonathonReinhart是否可以推荐一些基准测试工具,以便此线程提供更多信息?我很好奇您会使用什么。@La comadreja只是编写了一些示例,将其称为大量(10k、1M等)次,并使用您正在使用的任何编程语言的“获取当前时间”库调用对其计时。此线程可能会有所帮助,

SELECT*
相当于每天早上清空袜子抽屉来挑选一双
Select
相当于只挑选你想穿的那一双。你决定什么更有效率。