У меня есть несколько выборок из C# в одну таблицу на SQL Server за один период с помощью хранимой процедуры. Это правильно, но это медленно, и сейчас я хочу улучшить это.Улучшение 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 |
------------------------------------------
Я хочу, чтобы оптимизировать код выше, потому что он слишком медленный и запоздалый. Каково ваше предложение?
Ну, я бы просто получил все дни и типы с одним выбором, и я бы использовал правильные типы данных, такие как дата для дат, а не nvarchar (max) –
Можете ли вы попробовать что-то вроде 'Where Date = @date и type в (1,2,3) 'и' group by type'? – M22an
@ M22an Я не могу. Каждый раз я передаю один из видов «типа». –