Sql語句與存儲過程查詢數(shù)據(jù)的性能測試實現(xiàn)代碼
發(fā)布日期:2022-02-02 11:52 | 文章來源:源碼中國
一.建立數(shù)據(jù)庫Liezui_Test
ID int 主鍵 自增
Title varchar(100)
ReadNum int
二.向數(shù)據(jù)庫中插入100萬條數(shù)據(jù)
declare @i int
set @i=1
while @i<=500000
begin
insert into Liezui_Test(Title,ReadNum) values('執(zhí)行總數(shù)統(tǒng)計',@i)
set @i=@i+1
end
GO
declare @i int
set @i=1
while @i<=500000
begin
insert into Liezui_Test(Title,ReadNum) values('毛巾因經(jīng)常處于潮濕狀態(tài)而極易滋生有害細菌',@i)
set @i=@i+1
end
GO
三.增加SelectByTitle存儲過程
Create PROCEDURE [dbo].[SelectByTitle]
AS
BEGIN
Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'
END
三.開始測試
首先在頁面內放一個repeater 用于綁定數(shù)據(jù) 二個label 用于顯示結果
測試場景一 : 不綁定Repeater,只進行數(shù)據(jù)庫源的綁定
代碼如下:
Stopwatch st = new Stopwatch();
st.Start();
Repeater1.DataSource = Jinlong.Data.DBHelper.ReturnDataSet("Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'").Tables[0];
st.Stop();
Label1.Text = st.ElapsedMilliseconds.ToString() + "ms";
Stopwatch st2 = new Stopwatch();
st2.Start();
SqlParameter[] para = { };
Repeater1.DataSource = Jinlong.Data.DBHelper.RunProcedure("SelectByTitle", para, "ds");
st2.Stop();
Label2.Text = st2.ElapsedMilliseconds.ToString() + "ms";
結果如下:
Label1 Label2
52ms 48ms
39ms 46ms
45ms 44ms
43ms 42ms
37ms 40ms
43ms 44ms
結論:用Sql語句和存儲過程的速度差不多.
測試場景二 : 綁定Repeater
代碼如下:
Stopwatch st = new Stopwatch();
st.Start();
Repeater1.DataSource = Jinlong.Data.DBHelper.ReturnDataSet("Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'").Tables[0];
Repeater1.DataBind();
st.Stop();
Label1.Text = st.ElapsedMilliseconds.ToString() + "ms";
Stopwatch st2 = new Stopwatch();
st2.Start();
SqlParameter[] para = { };
Repeater1.DataSource = Jinlong.Data.DBHelper.RunProcedure("SelectByTitle", para, "ds");
Repeater1.DataBind();
st2.Stop();
Label2.Text = st2.ElapsedMilliseconds.ToString() + "ms";
結果如下:
Label1 Label2
161ms 192ms
205ms 191ms
142ms 208ms
153ms 198ms
134ms 209ms
280ms 335ms
結論:用存儲過程的速度居然比直接用Sql語句還要慢.
ID int 主鍵 自增
Title varchar(100)
ReadNum int
二.向數(shù)據(jù)庫中插入100萬條數(shù)據(jù)
declare @i int
set @i=1
while @i<=500000
begin
insert into Liezui_Test(Title,ReadNum) values('執(zhí)行總數(shù)統(tǒng)計',@i)
set @i=@i+1
end
GO
declare @i int
set @i=1
while @i<=500000
begin
insert into Liezui_Test(Title,ReadNum) values('毛巾因經(jīng)常處于潮濕狀態(tài)而極易滋生有害細菌',@i)
set @i=@i+1
end
GO
三.增加SelectByTitle存儲過程
Create PROCEDURE [dbo].[SelectByTitle]
AS
BEGIN
Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'
END
三.開始測試
首先在頁面內放一個repeater 用于綁定數(shù)據(jù) 二個label 用于顯示結果
測試場景一 : 不綁定Repeater,只進行數(shù)據(jù)庫源的綁定
代碼如下:
Stopwatch st = new Stopwatch();
st.Start();
Repeater1.DataSource = Jinlong.Data.DBHelper.ReturnDataSet("Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'").Tables[0];
st.Stop();
Label1.Text = st.ElapsedMilliseconds.ToString() + "ms";
Stopwatch st2 = new Stopwatch();
st2.Start();
SqlParameter[] para = { };
Repeater1.DataSource = Jinlong.Data.DBHelper.RunProcedure("SelectByTitle", para, "ds");
st2.Stop();
Label2.Text = st2.ElapsedMilliseconds.ToString() + "ms";
結果如下:
Label1 Label2
52ms 48ms
39ms 46ms
45ms 44ms
43ms 42ms
37ms 40ms
43ms 44ms
結論:用Sql語句和存儲過程的速度差不多.
測試場景二 : 綁定Repeater
代碼如下:
Stopwatch st = new Stopwatch();
st.Start();
Repeater1.DataSource = Jinlong.Data.DBHelper.ReturnDataSet("Select top 10000 * from Liezui_Test where Title Like '%執(zhí)行%'").Tables[0];
Repeater1.DataBind();
st.Stop();
Label1.Text = st.ElapsedMilliseconds.ToString() + "ms";
Stopwatch st2 = new Stopwatch();
st2.Start();
SqlParameter[] para = { };
Repeater1.DataSource = Jinlong.Data.DBHelper.RunProcedure("SelectByTitle", para, "ds");
Repeater1.DataBind();
st2.Stop();
Label2.Text = st2.ElapsedMilliseconds.ToString() + "ms";
結果如下:
Label1 Label2
161ms 192ms
205ms 191ms
142ms 208ms
153ms 198ms
134ms 209ms
280ms 335ms
結論:用存儲過程的速度居然比直接用Sql語句還要慢.
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
相關文章
關注官方微信