我只是想知道做多次选择和使用单个选择之间的区别是有任何性能增益吗?我看到有人这么做了,我觉得有点失控,就像下面这样;
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
vs。
select @a = cBranchName
,@b = cBranchAddress
,@c = dCreateDate
,@d = AssignedCompanyId
,@e = StoreFormat from mstores where nBranchCode = 1
我还假设5个select语句对数据库进行5次访问,我如何证明单个select语句比5个select语句快,
即使只是看着它,我已经认为单个选择语句比多个选择语句要快得多。
主要区别:
- 五次往返而不是一次。光/电的速度解决了这个问题
- 必须检查,解析和执行5个语句,而不是一个。你认为哪一种更快?
- 一致性-如果在选择之间发生更新会发生什么?
- 如果您显示执行计划,您可以非常清楚地看到正在进行的工作
我很不明白为什么有人会有理由认为这5个查询会比1个好。
我不认为这两种方法之间会有什么显著的区别。在方法#1中执行第一个SELECT之后,将存在一个执行计划,数据库引擎可以为其他4个SELECT重用该执行计划。并且:该页可能在此时被缓存,因此不需要返回到磁盘。方法#2在两个方面更可取:它(有争议地)更优雅,其次,它是一个单一的命令,因此在行执行时将被锁定。在方法#1中,行可能会在每次SELECT
对于一个表,我认为单选择应该是第一选择#,当你处理多个表时,根据情况单连接语句比多个选择语句更好
我认为单个语句可以使数据库做很多优化,因为它可以看到所有需要扫描的表,开销减少,并且可以在本地构建结果集。而且,对于下一个程序员来说,一条语句通常更容易理解和修改
最简单的方法是测试它来证明它,尽管我希望在单个表上进行一次选择比5次更便宜。对于需要连接的多个表,单独进行选择可能成本更低——您需要使用'explain plan'提前确定(有时连接不能/不使用索引,而单个表选择可以)。
http://msdn.microsoft.com/en-us/library/ms190287.aspxSET 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.