使用session
表格的前提,包含3列:id
,skey
和sdata
以及该表上的SELECT
查询。我有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的不必要的主键检索是否会影响查询本身的大部分性能。
答案 0 :(得分:1)
作为对来自SQL-Server的How a RDBMS execute a query的概述:
和
缓存中的数据(在缓冲池中)在所有查询之间共享 所以一旦获取了必须读取的后续数据访问操作符 相同的数据将从查找缓存中的数据中受益。
答案 1 :(得分:0)
没有。 2和3在性能方面不应该不同。
如果您发现存在差异,则可能是从缓存中检索而与查询无关。
当然,当您将结果集发送到客户端(浏览器)时,在这种情况下,您希望最小化结果集中的数据量。
在2和3之间选择基本上取决于where子句,即如果id参数可以是通配符,则在select中包含id。或者在代码中的某个地方使用结果集时,您无法再访问在检索时用作参数的ID。