【问题标题】:SELECT COLUMN SQL [closed]选择列 SQL [关闭]
【发布时间】:2015-01-11 21:35:00
【问题描述】:

当我们可以只使用SELECT * 并且只显示我们想要的列时,为什么我们需要使用查询SELECT COLUMN1, COLUMN2

SELECT ALLSELECT 有什么区别?

【问题讨论】:

  • 这取决于要求...
  • 当你来到超市时,你是否会因为“如果我明天需要这个芒果水果怎么办?!”所有的产品都买了?或者您有一份清单,上面只列出了您特别需要的产品?
  • 将服务器和客户端之间传输的数据量减少到所需的量。
  • ow,为了效率?好的,我明白了...:)

标签: mysql sql


【解决方案1】:

问题是,当您可以轻松地在应用程序中显示您喜欢的列并始终使用SELECT * 时,为什么还要使用SELECT col1, col2

主要原因有这些:

  1. 仅选择您想要的列意味着服务器必须收集并向应用程序发送更少的数据,从而实现更快的查询和更少的资源使用,尤其是当您有很多列或其中一些包含 BLOB 时。
  2. 如果数据库中的结构发生变化(例如,如果某列被重命名或删除,您会得到更容易理解的错误,它们会出现在选择中,而不是应用程序中。
  3. 如果您想通过整数索引来使用结果中的字段,您必须指定列,否则您将受制于查询优化提出的任何列顺序。您的应用程序可能会因为有人添加了列或索引而停止工作。

编辑以回答问题的第二部分:

哦,SELECT ALL 和 SELECT 之间的区别是没有区别。
SELECT ALL 是我所知道的所有方言中 SELECT 的默认行为。

但是,SELECT DISTINCT 不同。它返回一个集合的唯一值,所以如果你运行:

SELECT DISTINCT col1, col2 

在包含

的表上
1,2
1,2
2,2
2,3

你会得到

1,2
2,2
2,3

【讨论】:

  • “如果你想通过整数索引来使用结果中的字段”——如果一个人首先这样做——我发现这是对遵循糟糕做法的公平惩罚。
  • 很抱歉过度编辑,但我只是想真正开车回家。在我的日子里看到了很多事情发生了。 :-)
  • 其实可能不是。有几个用例。
  • @zerkms:意识到我最好解释一下。示例: 1. 如果您在应用程序中动态创建与生成的 SQL:s 匹配的视图,等等。 2.对于速度;一些数据集具有非常愚蠢的字段查找,并且每行都进行查找,尽管我希望这些天不常见。 3. 有您构建的支点。 4. 当然,还有一些愚蠢的遗留应用程序只会强迫你做这样的事情。
  • @NicklasBörjesson 实际上我完全同意你的观点(你目前唯一的赞成票是我所做的 :-),我只是想开玩笑说使用位置列太糟糕了,所以这是公平的有人被它咬了
【解决方案2】:

在比较SELECT Col1, Col2SELECT * 的差异之前发布了很多问题

你可以在这里找到其中的一些。

Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc

Is there a difference between Select * and Select

select * vs select column


关于SELECT ALLSELECT: 这两个语句没有区别,可以使用SELECT Col1, Col2SELECT ALL Col1, Col2

如果您查看SELECT 声明:

SELECT [ALL | DISTINCT] column1[,column2] FROM table1

ALL 是默认值。

【讨论】:

    【解决方案3】:

    如果您有一个包含很多列的大表并且您只需要其中一个列,“SELECT COLUMN”的执行速度将比“SELECT ALL”快。

    【讨论】:

    • 什么是“大桌子”?
    • 包含大量数据的表
    • 如果您有一个包含 10 亿行但只从中选择 1 行的表:为什么行数很重要(在问题的上下文中)?
    • 在问题的上下文中,我无法找到或理解将选择多少行。
    • 我的意思是:重要的是结果集的大小,而不是表的总大小。您可能有一个 1000 行的小表,与自身连接 2 次,得到 10^9 行的笛卡尔积。所以,小表,大结果集。
    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 2015-03-30
    • 2020-09-09
    • 2018-04-30
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多