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 |
------------------------------------------
我想优化上面的代码,因为它太慢了。你的建议是什么?
我的解决方案是:
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次,当然它很慢。