临时表上的表现

时间:2014-03-06 18:45:43

标签: sql tsql sql-server-2000

我处于遗留状态,我在SQL 2k上运行了一个非常大的动态SQL查询。我不能使用TABLE返回函数,我的动态SQL仅限于varchar(8000),我现在超过了。它使用的是非常慢的UDF,我将逻辑拉入主查询以避免它。但是,这推动了我超过8000并且在SQL 2k中我无法传递8k以上的varchar(MAX)。我可以使用EXEC并连接一个字符串,但这会减慢它并且不允许缓存。

部分查询是一个非常复杂的定价计算,它采用价格类型和用户变量。然后使用它们查找价格值(运营商,金额,转换类型),然后使用此值和特定价格类型(大约一个)来计算用户授权成本。

在计算此成本后,我们使用它来限制基于价格和来自的价格返回的模型以及来自和来自(另一个计算)的保证金价格。我想我们不会做所有符合其他标准的计算,而是将所有符合其他条件的产品都转移到临时表中,计算价格并将其存储在临时表中,然后选择符合临时表中的价格和保证金价格标准。

现在它只在一个SELECT中。如果我抓住一个更大的数据集并将其插入一个临时表,然后从该表中拉出子集而不是在一个SELECT中完成所有操作,它会影响效率,或者它是多少。当我只需要2000个记录时,抓住并存储10k记录并存储它们似乎是浪费。但是我想知道这是不是内部的SQL引擎在做什么,以及它是否有很大差异。

所以基本上它会(非常简化)......

SELECT model, (authorizedPriceCalculationLogic) FROM models WHERE (authorizedPriceCalculationLogic) Between @from and @to AND  (authorizedPriceCalculationLogic)/retailPrice*100 Between @marginFrom and @marginTo

AND

INSERT INTO #tempProducts
SELECT mode, retailPrice, price 1, price 2, price 3...price 12, priceType, priceOperator, priceAmount FROM models

UPDATE #tempProducts SET authPrice = (authorizedPriceCalculationLogic), authPriceMargin = (authorizedPriceCalculationLogic)/retailPrice*100

SELECT model, authorizedPrice FROM #tempProducts WHERE authorizedPrice Between @from and @to AND authPriceMargin Between @marginFrom and @marginTo

0 个答案:

没有答案
相关问题