我有两个表与600K行之间的关系,我的第一个问题是,是很多的数据?它似乎并不像很多(中排,而不是字节为单位)什么是太多的SQL Server数据,我如何分析我的执行计划
我可以写一个这样的查询
SELECT EntityID, COUNT(*)
FROM QueryMembership
GROUP BY EntityID
而且它现在的时间都完成,但是当我做到这一点。
SELECT EntityID, COUNT(*)
FROM QueryMembership
WHERE PersonID IN (SELECT PersonID FROM GetAcess(1))
GROUP BY EntityID
该事情需要3-4秒才能完成,尽管刚刚返回约183行。 SELECT * FROM QueryMembership
大约需要12-13秒。
我不明白的是,一旦我引入这个表值函数,像这样的过滤器会花费那么长时间。函数本身并不需要任何时间来返回它的结果,无论我将它写成CTE还是一些奇怪的子查询,结果都是一样的。
但是,如果推迟过滤器,通过将第一个选择的结果插入临时表#temp
,然后使用GetAccess
UDF,整个过程的速度将快三倍。
我真的很想在这个问题上提供一些深入的技术帮助。我应该在哪里开始寻找,以及我如何分析执行计划以确定发生了什么。
不,600K行不是很多。在企业应用程序中拥有数百万行是非常普遍的。 – DOK 2009-11-23 16:25:04
谈论6亿行 - 是的,那么你开始进入“大量数据”...... – 2009-11-23 16:25:59
这就是我认为,至少有一些估计继续下去。 – 2009-11-23 19:02:38