作为 "WHERE PrimaryKey =" SQL 语句的一部分检索主键是否有性能损失
Is there a performance penalty for retrieving the primary key as part of a "WHERE PrimaryKey =" SQL Statement
使用具有 3 列的 session
table 的前提:id
、skey
和 sdata
,以及一个 SELECT
查询在那 table 上。 SELECT [...] WHERE id = 1
:
我有 3 个选项
"SELECT * FROM sessions WHERE id = 1"
"SELECT id, skey, sdata FROM sessions WHERE id = 1"
"SELECT skey, sdata FROM sessions WHERE id = 1"
解决方案 2 使用特定的列,避免对性能不太友好 *
。尽管在这种情况下,除非有人另有说明,否则它们在性能上似乎是等效的。在这种情况下,我会选择选项 1,因为它会缩短查询时间,而且无论如何我都会检索所有列。
然而,我真正的问题是选项 3 在数据库服务器端是否有任何性能优势。鉴于我已经有了主键,之后我可以轻松地将它重新分配给查询结果集,并且技术上根本不需要检索该列。
除了对数据包大小的最小影响外,根据目前的知识,我无法真正判断 1 和 2 的不必要的主键 retrieval 是否会影响查询的大部分性能本身。
没有。 2 和 3 在性能方面应该没有什么不同。
如果您注意到差异,则它可能是从缓存中检索的,与查询无关。
当然,当您将结果集发送到客户端(浏览器)时除外,在这种情况下您希望尽量减少结果集中的数据量。
在 2 和 3 之间进行选择基本上取决于 where 子句,即如果 id 参数可以是通配符,则在 select 中包含 id。或者,当您在代码中某处使用结果集时,您不再有权访问在检索时用作参数的 ID。
作为对 How a RDBMS execute a query 的概述,来自 SQL-服务器 :
- 主要是索引
和
Data in the cache (in the Buffer Pool) is shared between all queries
so once fetched subsequent data access operators that have to read the
same data will benefit from finding the data in the cache.
使用具有 3 列的 session
table 的前提:id
、skey
和 sdata
,以及一个 SELECT
查询在那 table 上。 SELECT [...] WHERE id = 1
:
"SELECT * FROM sessions WHERE id = 1"
"SELECT id, skey, sdata FROM sessions WHERE id = 1"
"SELECT skey, sdata FROM sessions WHERE id = 1"
解决方案 2 使用特定的列,避免对性能不太友好 *
。尽管在这种情况下,除非有人另有说明,否则它们在性能上似乎是等效的。在这种情况下,我会选择选项 1,因为它会缩短查询时间,而且无论如何我都会检索所有列。
然而,我真正的问题是选项 3 在数据库服务器端是否有任何性能优势。鉴于我已经有了主键,之后我可以轻松地将它重新分配给查询结果集,并且技术上根本不需要检索该列。
除了对数据包大小的最小影响外,根据目前的知识,我无法真正判断 1 和 2 的不必要的主键 retrieval 是否会影响查询的大部分性能本身。
没有。 2 和 3 在性能方面应该没有什么不同。
如果您注意到差异,则它可能是从缓存中检索的,与查询无关。
当然,当您将结果集发送到客户端(浏览器)时除外,在这种情况下您希望尽量减少结果集中的数据量。
在 2 和 3 之间进行选择基本上取决于 where 子句,即如果 id 参数可以是通配符,则在 select 中包含 id。或者,当您在代码中某处使用结果集时,您不再有权访问在检索时用作参数的 ID。
作为对 How a RDBMS execute a query 的概述,来自 SQL-服务器 :
- 主要是索引
和
Data in the cache (in the Buffer Pool) is shared between all queries so once fetched subsequent data access operators that have to read the same data will benefit from finding the data in the cache.