Lun*_*Box 7 database postgresql select query-optimization postgresql-performance
我一直在阅读这一点,我知道最好明确列出列名称,我仍然有一个问题。
让我们假设以下场景(非常接近我的现实生活场景):
永远不会添加新列
我没有使用任何 blob 数据
我实际上确实想返回所有列
我有一个大约有 1.4 亿行的表
我实际上并不需要全部 1.4 亿行,但为了便于讨论,我们假设我需要
我没有使用任何连接,其他人也不会
下面的查询实际上正是我运行查询的方式。
以下查询之间是否存在性能差异:
SELECT * FROM <table_name>
Run Code Online (Sandbox Code Playgroud)
VS
SELECT <every_column_name...> FROM <table_name>
Run Code Online (Sandbox Code Playgroud)
编辑:我知道关于这个主题有一百万个问题。但对于这种特定的场景,是否存在任何性能差异?是select *糟糕还是两个查询具有相同的性能?
据我所知,根据使用的结果explain,对于这种特殊情况,没有区别。
这是对我的评论的详细阐述。
select *用于即席查询绝对没有坏处。这是一个很大的方便和通用。
当您想要随着时间的推移运行相同的查询时,就会出现问题。特别是,如果查询已编译,则对基础表的更改可能会导致意外问题。select *我“亲切地”回忆起,当基础表中的列类型发生更改时,我花了大约 10 个小时调试由视图中的a 引起的问题(从早上 6:00 开始) 。代码未重新编译,数据记录中的偏移量已关闭。
即使这种情况也可以通过强制重新编译来解决。而且,我通常SELECT *在即席查询中使用。
您的问题总结了一些关键点,例如宽列会减慢查询速度。