【问题标题】:Which is faster: "SELECT * FROM table" or "SELECT x,y,q FROM table" (from a table with 4 fields)哪个更快:“SELECT * FROM table”或“SELECT x,y,q FROM table”(来自具有 4 个字段的表)
【发布时间】:2012-05-18 02:31:54
【问题描述】:

我想知道,什么是最快的(或最轻的数据库处理)

假设 db 表有 4 个字段:x,y,z,q

我只需要 3 个:x,y,q

数据库执行最快/最简单的方式是什么(使用 PHP).. “SELECT * FROM table”还是“SELECT x,y,q FROM table”?

如果表格有 5 个或更多字段,而我仍然只需要选择 3 个字段,同样适用吗?

【问题讨论】:

  • 按照最基本的逻辑思考。你有一个装有不同种类球的袋子。有些人想打篮球和排球。你可以把篮球和排球拿出来,其余的留在袋子里。或者,您也可以将整个袋子清空,取回篮球和排球以将它们分发出去,其余的则放置。哪个更容易?

标签: php mysql sql database


【解决方案1】:

SELECT x,y,z FROM table 更快,因为 MySQL 在执行查询之前不必查找表中的列。

【讨论】:

  • 如果这些列被索引,它甚至不需要从表本身读取......
  • 好的。在我的脑海中,mysql 看起来更容易全部选择,而不是具体(并让 mysql 搜索/排序这些字段)
  • 它仍然需要查找列以验证 x,y,z 是该表的有效列。
【解决方案2】:

在大多数数据库中,* 比指定字段慢。

将所有列放在一起也是一种很好的编程习惯,即使它们很多。

【讨论】:

  • @mowgli 出于几个原因,这是一种很好的做法。 1)它可以更好地从查询结果中识别您实际使用的数据,2)由于* 将检索所有列的数据,如果将来某个时候有人向您的表中添加了 200 个额外的列,您会突然必须处理 200 倍的传输数据,这影响您的性能,即使他们的工作与您的查询无关。基本上就是最小访问或最小特权的原则(en.wikipedia.org/wiki/Principle_of_least_privilege
【解决方案3】:

SELECT x,y,q FROM table 总是比select * 快,因为您没有阅读所有字段,但提到SELECT x,y,q,z FROM tableselect * 在性能方面具有相同的效果。

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2014-12-12
    • 2011-04-06
    • 2023-01-30
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多