C# & SQL Server improvement

本文关键字:Server improvement SQL amp | 更新日期: 2023-09-27 18:19:14

我已经通过存储过程在一个时间段内从c#到SQL Server中的一个表进行了多次选择。没错,但速度太慢了,我现在想改进一下。

这是我的c#代码:
while (startDate!= endDate)
{
    var anyDay_CntPost = 0;
    anyDay_CntPost = db.GetPostCount(1, tmpDate).Select(x => x.cntPost).FirstOrDefault().Value;
    if (anyDay_CntPost != 0)
    {
        var anyDay_cnt1 = db.GetPostCount(1, tmpDate).Select(x => x.cntPost).FirstOrDefault().Value; ;
        var anyDay_cnt2 = db.GetPostCount(2, tmpDate).Select(x => x.cntPost).FirstOrDefault().Value;
        var anyDay_cnt3 = db.GetPostCount(3, tmpDate).Select(x => x.cntPost).FirstOrDefault().Value;
        listCount.arr1.Add(anyDay_cnt1);
        listCount.arr2.Add(anyDay_cnt2);
        listCount.arr3.Add(anyDay_cnt3);
    }
    startDate = startDate.AddDays(1);
}

这是存储过程代码:

ALTER PROCEDURE [dbo].[GetPostCount]
    @type int,
    @date nvarchar(max)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    ----<<-----------------------------
    if @type = 1
    begin
        SELECT cntPost = count(*) 
        FROM Post 
        WHERE Date = @date AND type = 1
    end
    ---<<------------------------------
    if @type = 1
    begin
        SELECT cntPost = count(*) 
        FROM Post 
        WHERE Date = @date and type = 2
    end
    ---<<------------------------------
    if @type = 2
    begin
        SELECT cntPost = count(*) 
        FROM Post 
        WHERE Date = @date and type = 3
    end
End

结果是:

____________________________________________ 
|    Date    | Count 1 | Count 2 | Count 3 |  
 ------------------------------------------
| 10/25/2015 |   200   |  360    |   547   |
| 10/24/2015 |   185   |  326    |   132   |
| 10/23/2015 |   100   |  490    |   670   |
 ------------------------------------------

我想优化上面的代码,因为它太慢了。你的建议是什么?

C# & SQL Server improvement

我的解决方案是:

create procedure [dbo].[GetPostCount]
    @startdate date,
    @enddate date
as
    select Date, Type, count(*) as cntPost
    from Post 
    where Date >= @startdate and Date <= @enddate and Type in (1, 2, 3)
    group by Date, Type

你只需要选择一次你需要的所有数据,然后在while循环中使用它。现在你在每次迭代中查询数据库4次,当然它很慢。