【问题标题】:Is selecting fewer columns speeding up my query?选择更少的列会加快我的查询速度吗?
【发布时间】:2020-02-05 07:20:30
【问题描述】:

我已经看到几个问题比较 select * 以明确选择所有列,但是选择的列少与多呢?

换句话说,就是:

SELECT id,firstname,lastname,lastlogin,email,phone

比可以忽略不计的快:

SELECT id,firstname,lastlogin

我意识到通过系统传输到应用程序的更多数据会有微小的差异,但这是总数据/负载差异,而不是查询成本(单元格中的更大数据会产生相同的效果无论如何我相信) - 我只是想优化我的查询,因为无论如何我都必须在某个时候加载所有数据......

当我的管理员用户登录时,我会将整个用户数据库加载到缓存中,但我可以只查询关键数据以节省一些执行时间,或者只获取所有内容 - 如果它大致可以相同的。我知道更多的行等于更长的查询执行时间 - 但是我的查询中选择更多的值呢?

【问题讨论】:

  • 这能回答你的问题吗:stackoverflow.com/questions/25093187/…
  • 非常接近,但是,当他提到返回同一页面重新摄取相同的数据/执行相同的查询不值得时,他暗示我认为我们会等待它完成,在我的情况下,这将全部停机,在第一次查询之后,我的应用程序有一些时间可以杀死,它很可能在登录时利用空闲时间发出异步请求,所以总查询长度是与我无关 - 只有我可以预先保存(如果有的话)......
  • 始终命名并正确限定您实际希望返回的所有列。
  • 请提供SHOW CREATE TABLE。数据类型可能很重要。
  • "将整个用户数据库加载到缓存中" -- 这通常是一个错误;请提供详细信息。

标签: mysql sql query-optimization


【解决方案1】:

在大多数情况下,唯一的区别是这些字段的数据稍大一些,并且获取它们的时间更长。

有两点需要考虑:

  1. 如果附加字段非常大,那么这可能是性能上的很大差异。
  2. 如果存在涵盖您实际需要的列的索引,则该索引可用于查询。这可以加快数据库中的查询速度。

不过,一般来说,建议是将您想要的列返回给应用程序。如果有复杂的处理,您应该考虑在数据库而不是应用程序中进行。

【讨论】:

  • 很抱歉花了这么长时间才回复 - 我确实想要所有数据,但只有部分数据在视觉上很重要,我希望优化感知 (和总如果可能的话)我打开视图的速度和响应能力。因此,当您说“想要”时-好吧,我“想要”所有这些,但是这个问题是关于我对何时发生以及查询数量很灵活-我只希望我的应用程序具有最佳响应能力,所以我从初始数据库读取开始。我只想知道扫描数据库每一行的过程是否更快,如果您在通过时选择更少的单元格...
猜你喜欢
  • 2018-02-18
  • 2012-11-06
  • 2010-11-17
  • 2014-05-29
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
相关资源
最近更新 更多