1

我只是想知道进行多选与使用单选之间有什么区别,是否有任何性能提升?我看到有人这样做了,我觉得它有点失控,如下所示;

select @a = cBranchName from mstores where nBranchCode = 1
select @b = cBranchAddress from mstores where nBranchCode = 1
select @c = dCreateDate from mstores where nBranchCode = 1
select @d = AssignedCompanyId from mstores where nBranchCode = 1
select @e = StoreFormat from mstores where nBranchCode = 1

对比

select @a = cBranchName 
  ,@b = cBranchAddress
  ,@c = dCreateDate
  ,@d = AssignedCompanyId
  ,@e = StoreFormat from mstores where nBranchCode = 1

我还假设5个select对数据库进行了5次访问,我如何证明单个select语句比5个select语句快,

即使只看它,我已经认为单选语句比多选快得多。

4

4 回答 4

2

主要区别:

  1. 五次往返而不是一次。光/电的速度可以解决这个问题
  2. 必须检查、解析和执行 5 条语句而不是一条。你认为什么会更快?
  3. 一致性 - 如果在选择之间发生更新会发生什么?
  4. 如果您显示执行计划,您可以非常清楚地看到正在进行的工作

我很不明白为什么有人会认为这 5 个查询会比一个更好。

于 2013-05-29T11:53:23.517 回答
1

我不希望看到这两种方法之间有显着差异。在方法 #1 中执行第一个 SELECT 后,将存在一个执行计划,数据库引擎可以将其重新用于其他 4 个 SELECT。并且:该页面可能会在那时被缓存,因此不需要返回磁盘。方法#2 在两个方面更可取:它(可以说)更优雅,其次它是一个命令,因此行将在执行时被锁定。在方法 #1 中,行可能会在每个 SELECT 之间发生变化

于 2013-05-29T11:40:02.890 回答
0

最简单的方法是对其进行测试以证明这一点,尽管我希望单个表上的一个选择会比 5 个便宜。对于需要连接的多个表,进行单个选择可能会更便宜 - 你需要使用“解释计划”来提前确定(有时连接不能/不使用单个表选择的索引)。

http://msdn.microsoft.com/en-us/library/ms190287.aspx

SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO

结果:

SQL Server parse and compile time: 
 CPU time = 0 ms, elapsed time = 1 ms.

 (269 row(s) affected)

SQL Server Execution Times:
 CPU time = 0 ms,  elapsed time = 2 ms.
SQL Server parse and compile time: 
 CPU time = 0 ms, elapsed time = 1 ms.
于 2013-05-29T11:39:12.183 回答
0

对于一个表,我认为单选应该是第一选择#,当你处理多个表时,根据情况,单连接语句比多选语句更好

我认为单个语句可以使数据库进行很多优化,因为它可以看到它需要扫描的所有表,减少开销,并且可以在本地构建结果集。而且单个语句通常会更容易供下一个程序员理解和修改

于 2013-05-29T11:37:48.830 回答