选择* vs选择所有列名称

时间:2016-07-26 21:49:24

标签: postgresql

我一直在阅读这篇文章,我知道明确列出列名称会更好,我还有一个问题。

让我们假设以下场景(非常接近我的现实生活场景):

  1. 永远不会添加新列

  2. 我没有使用任何blob数据

  3. 我确实想要返回所有列
  4. 我的表格大约有1.4亿行
  5. 我实际上并不需要所有1.4亿行,但我们只是假装为了争论而这样做
  6. 我没有使用任何联接,没有其他人会
  7. 下面的查询实际上就是我将如何运行查询。
  8. 以下查询之间是否存在性能差异:

    select *
    from table
    

    VS

    select every_column_name
    from table
    

    编辑:据我所知,这个话题有一百万个问题。但对于这个特别的情景,是否存在任何性能差异? select *仍然不好或两个查询都有相同的效果吗?

    据我所知,根据使用explain的结果,对于这种特殊情况没有区别。

2 个答案:

答案 0 :(得分:2)

这是对我的评论的详细说明。

使用select *进行即席查询绝对没有坏处。这是一个很大的方便和共同。

当您想要随时间运行相同的查询时出现问题。特别是,如果编译了查询,则对基础表的更改可能会导致意外问题。我喜欢"当基础表中的列类型发生变化时,在视图中调用select *引起的问题(从早上6点开始)调用大约10个小时。代码未重新编译,数据记录中的偏移量已关闭。

即使这种情况也可以通过强制重新编译来解决。而且,我通常在即席查询中使用SELECT *

您的问题总结了一些关键点,例如宽列减慢了查询速度。

答案 1 :(得分:0)

它们之间没有任何性能差异。当DBMS分析这两个语句时,它会生成相同的查询。也就是说,*是every_column_name的快捷方式。