成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

查詢數據量大時,關聯表查詢與循環查詢哪個更好

數據庫 SQL Server
本文通過實例來驗證關聯表查詢和循環查詢的執行速度問題,希望能對讀者有所幫助。

SQL Server數據庫開發中,涉及多表數據聯合查詢時,一般都會想當然的Inner Join、Left Join,也經常出現數據量一大查詢就特別慢的問題。如果不關聯表,而是在循環中,需要時再查詢數據庫,獲取其他表的數據。本文通過以下的例子來驗證查詢的方式和速度的關系。

首先看看在游標中,關聯表循環和循環中再查詢單個數據比較:

(PS:Order表中數據共5000多一點,Member表中數據近16000)

SQL代碼 關聯表

 

  1. Declare @idx int,@idxCount int,@MbCd varchar(20)  
  2.  
  3. Set @idxCount = 0 
  4.  
  5. Declare Cur_Test Cursor For  
  6.  
  7. Select M.MB_CD From Order O Inner Join Member M On O.MB_CD=M.MB_CD  
  8.  
  9. Open Cur_Test  
  10.  
  11. Fetch Next From Cur_Test Into @MbCd  
  12.  
  13. While (@@FETCH_STATUS = 0)  
  14.  
  15. Begin  
  16.  
  17. Set @idx = 1 
  18.  
  19. Set @idxCount = @idxCount + @idx  
  20.  
  21. Fetch Next From Cur_Test Into @MbCd  
  22.  
  23. End  
  24.  
  25. Close Cur_Test  
  26.  
  27. DEALLOCATE Cur_Test  
  28.  
  29. print @idxCount 

 

執行時間:34秒

SQL代碼 不關聯表

 

  1. Declare @idx int,@idxCount int,@MbCd varchar(20)  
  2.  
  3. Set @idxCount = 0 
  4.  
  5. Declare Cur_Test Cursor For  
  6.  
  7. Select MB_CD From ORDER  
  8.  
  9. Open Cur_Test  
  10.  
  11. Fetch Next From Cur_Test Into @MbCd  
  12.  
  13. While (@@FETCH_STATUS = 0)  
  14.  
  15. Begin  
  16.  
  17. Set @idx = 0 
  18.  
  19. Select @idx = COUNT(*) From MEMBER Where MB_CD=@MbCd  
  20.  
  21. Set @idxCount = @idxCount + @idx  
  22.  
  23. Fetch Next From Cur_Test Into @MbCd  
  24.  
  25. End  
  26.  
  27. Close Cur_Test  
  28.  
  29. DEALLOCATE Cur_Test  
  30.  
  31. print @idxCount 

 

執行時間:18秒

確實,不關聯表快了將近一倍。

不過,考慮到實際使用中,如果是代碼中循環執行查詢語句去查詢單個數據,打開數據庫連接、關閉數據庫連接也需要消耗時間,而在游標中是不需要的,所以,也在C#中測試了一下。

首先是未關聯表查詢數據,代碼如下:

C#代碼 關聯表

 

  1. int intIdxCount = 0;  
  2.  
  3. DateTime dtmBegin = DateTime.Now;  
  4.  
  5. using (DataTable dtList = new SqlDBOperator().exeSqlForDataTable("Select M.MB_CD,O.ORD_NO From ORDER O Inner Join MEMBER M On M.MB_CD=O.MB_CD"))  
  6.  
  7. 5  
  8.  
  9. {  
  10.  
  11. foreach (DataRow dr in dtList.Rows)  
  12.  
  13. {  
  14.  
  15. intIdxCount += 1;  
  16.  
  17. }  
  18.  
  19. }  
  20.  
  21. DateTime dtmEnd = DateTime.Now;  
  22.  
  23. this.litlMsg.Text = "開始執行:" + dtmBegin.ToString() + "<br/>結束執行:" + dtmEnd.ToString() + "<br/>"; 

 

執行結果:

開始執行:2011/7/19 22:15:31

結束執行:2011/7/19 22:15:31 

大約 0 秒

C#代碼 不關聯表

 

  1. DataTable dtTemp = new DataTable();  
  2.  
  3. DateTime dtmBegin = DateTime.Now;  
  4.  
  5. using (DataTable dtList = new SqlDBOperator().exeSqlForDataTable("Select MB_CD From ORDER"))  
  6.  
  7. {  
  8.  
  9. foreach (DataRow dr in dtList.Rows)  
  10.  
  11. {  
  12.  
  13. dtTemp = new SqlDBOperator().exeSqlForDataTable("select count(*) From MEMBER where MB_CD='" + dr["MB_CD"].ToString().Trim() + "'");  
  14.  
  15. }  
  16.  
  17. }  
  18.  
  19. DateTime dtmEnd = DateTime.Now;  
  20.  
  21. this.litlMsg.Text = "開始執行:" + dtmBegin.ToString() + "<br/>結束執行:"+dtmEnd.ToString(); 

 

執行結果:

開始執行:2011/7/19 21:56:22

結束執行:2011/7/19 21:56:43 

大約21秒

通過上面的實驗得出:當數據量過大時關聯查詢會使執行速度過慢,我們在實際的查詢過程中應根據實際情況來選擇使用何種查詢方式。

【編輯推薦】

  1. 誤刪SQL Server日志文件后怎樣附加數據庫
  2. SQL Server 2005數據庫用戶權限管理的設置
  3. 淺析SQL Server數據庫專用管理員連接DAC的使用
  4. 在SQL SERVER 2005執行存儲過程的權限分配問題
  5. T-SQL行列相互轉換命令:PIVOT和UNPIVOT使用詳解
責任編輯:趙鵬 來源: 博客園
相關推薦

2012-06-05 02:20:24

JPAJava查詢語言

2021-01-07 07:46:34

MyBatis 數據量JDBC

2024-04-17 08:54:08

高并發技術ES

2017-09-07 16:20:39

SQL查詢語句查詢優化

2017-07-25 15:35:07

MysqlMysql優化LIMIT分頁

2009-09-25 10:22:35

Hibernate多表

2024-05-28 08:47:52

2022-09-19 08:41:02

數據查詢分離

2020-11-05 10:59:45

Mybatis

2018-09-06 16:46:33

數據庫MySQL分頁查詢

2009-09-15 13:28:49

LINQ表間關系查詢

2020-06-11 08:56:34

數據倉庫數據庫數據

2018-07-11 20:07:06

數據庫MySQL索引優化

2010-07-16 08:50:00

SQL Server表

2010-08-04 11:03:03

DB2數據表

2010-04-26 14:24:58

Oracle數據庫索引

2010-09-26 15:23:24

SQL語句

2010-09-28 15:34:05

SQL表結構

2010-10-29 16:48:30

oracle查詢所有表

2021-05-11 11:05:43

SAL子查詢
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一本一道久久a久久精品综合 | 视频1区2区 | 欧美淫片| 久草成人网 | 亚洲精品在线免费观看视频 | 正在播放国产精品 | 91短视频网址 | 亚洲欧美日本国产 | 亚洲免费人成在线视频观看 | 成人性生交大片免费看中文带字幕 | 日本三级网站在线 | 国产久 | 中文亚洲视频 | 美女天天操| 免费看av大片 | 久久精品国产亚洲 | 欧日韩在线观看 | 成年人网站国产 | 亚洲视频一区二区三区 | 日韩在线一区二区三区 | 久久久91| 国产三级| 国产精品视频偷伦精品视频 | 亚洲国产成人精品久久 | 美女天天操| 99精品国产一区二区青青牛奶 | 日日夜夜精品免费视频 | 成人免费大片黄在线播放 | 91精品在线播放 | 国产清纯白嫩初高生视频在线观看 | 免费一级大片 | 欧洲一级毛片 | 国产精品成人国产乱一区 | 日韩一区二区三区在线观看 | 国产有码 | 亚洲一区二区在线视频 | 91欧美| 午夜影视大全 | 欧美日韩不卡 | 99久久免费精品国产免费高清 | 精品免费国产一区二区三区四区 |