从标量函数中的2个Count(*)值返回百分比值?

时间:2013-11-18 21:45:22

标签: sql-server-2008 function scalar

我是新手,并且第一次使用标量函数。

我尝试处理的记录越多,但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列,所以它们很快我希望!!

0 个答案:

没有答案