我是新手,并且第一次使用标量函数。
我尝试处理的记录越多,但S L O W E R ..它得到了......
我做错了吗?我正在从视图中读取并在WHERE子句中有2个条件。
40条记录甚至400条返回速度相当快..(这是一个老式的意大利面条应用btw在SQL Server 2008上运行)但是开始尝试处理800多条记录并且它的指数速度会慢得多......
有什么建议吗?
ALTER FUNCTION [dbo].[GetAccount_Total_By_Domain]
(@domain nvarchar(128), @status nvarchar(128))
RETURNS decimal(10, 2)
AS
BEGIN
DECLARE @allAccountsTotal int;
DECLARE @statusTotal int;
DECLARE @returnPercent decimal(10,2);
SELECT
@allAccountsTotal = COUNT(*)
FROM [NDCSTATS].[dbo].[SEC_ADMIN_ACCOUNT_COMPLIANCE_VW]
WHERE Domain = @domain;
SELECT
@statusTotal = COUNT(*)
FROM [NDCSTATS].[dbo].[SEC_ADMIN_ACCOUNT_COMPLIANCE_VW]
WHERE Domain = @domain AND StatusVal = @status;
SET @returnPercent = CAST(100 * SUM(@statusTotal) / SUM(@allAccountsTotal) OVER() AS DECIMAL(10, 2))
--100 * @allAccountsTotal / @statusTotal;
RETURN @returnPercent;
END
更新:
我在Core
表上放了一个非聚集索引,在这种情况下是DOMAIN
一个nvarchar(128)
类型值,因为我们按域分组 - 而且还有StatusVal - 只有StatusVal不是直到查看我们做UNION的地方。
我还删除了Core表中不需要的列,查询加速了大约2000个记录......但仍然遇到像10k记录这样的大问题。
我还在INDEX中添加了一些标准列,这些列是BIT列,所以它们很快我希望!!