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

查詢數(shù)據(jù)量大時(shí),關(guān)聯(lián)表查詢與循環(huán)查詢哪個(gè)更好

數(shù)據(jù)庫 SQL Server
本文通過實(shí)例來驗(yàn)證關(guān)聯(lián)表查詢和循環(huán)查詢的執(zhí)行速度問題,希望能對讀者有所幫助。

SQL Server數(shù)據(jù)庫開發(fā)中,涉及多表數(shù)據(jù)聯(lián)合查詢時(shí),一般都會(huì)想當(dāng)然的Inner Join、Left Join,也經(jīng)常出現(xiàn)數(shù)據(jù)量一大查詢就特別慢的問題。如果不關(guān)聯(lián)表,而是在循環(huán)中,需要時(shí)再查詢數(shù)據(jù)庫,獲取其他表的數(shù)據(jù)。本文通過以下的例子來驗(yàn)證查詢的方式和速度的關(guān)系。

首先看看在游標(biāo)中,關(guān)聯(lián)表循環(huán)和循環(huán)中再查詢單個(gè)數(shù)據(jù)比較:

(PS:Order表中數(shù)據(jù)共5000多一點(diǎn),Member表中數(shù)據(jù)近16000)

SQL代碼 關(guān)聯(lián)表

 

  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 

 

執(zhí)行時(shí)間:34秒

SQL代碼 不關(guān)聯(lián)表

 

  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 

 

執(zhí)行時(shí)間:18秒

確實(shí),不關(guān)聯(lián)表快了將近一倍。

不過,考慮到實(shí)際使用中,如果是代碼中循環(huán)執(zhí)行查詢語句去查詢單個(gè)數(shù)據(jù),打開數(shù)據(jù)庫連接、關(guān)閉數(shù)據(jù)庫連接也需要消耗時(shí)間,而在游標(biāo)中是不需要的,所以,也在C#中測試了一下。

首先是未關(guān)聯(lián)表查詢數(shù)據(jù),代碼如下:

C#代碼 關(guān)聯(lián)表

 

  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 = "開始執(zhí)行:" + dtmBegin.ToString() + "<br/>結(jié)束執(zhí)行:" + dtmEnd.ToString() + "<br/>"; 

 

執(zhí)行結(jié)果:

開始執(zhí)行:2011/7/19 22:15:31

結(jié)束執(zhí)行:2011/7/19 22:15:31 

大約 0 秒

C#代碼 不關(guān)聯(lián)表

 

  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 = "開始執(zhí)行:" + dtmBegin.ToString() + "<br/>結(jié)束執(zhí)行:"+dtmEnd.ToString(); 

 

執(zhí)行結(jié)果:

開始執(zhí)行:2011/7/19 21:56:22

結(jié)束執(zhí)行:2011/7/19 21:56:43 

大約21秒

通過上面的實(shí)驗(yàn)得出:當(dāng)數(shù)據(jù)量過大時(shí)關(guān)聯(lián)查詢會(huì)使執(zhí)行速度過慢,我們在實(shí)際的查詢過程中應(yīng)根據(jù)實(shí)際情況來選擇使用何種查詢方式。

【編輯推薦】

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

2012-06-05 02:20:24

JPAJava查詢語言

2021-01-07 07:46:34

MyBatis 數(shù)據(jù)量JDBC

2024-04-17 08:54:08

高并發(fā)技術(shù)ES

2017-09-07 16:20:39

SQL查詢語句查詢優(yōu)化

2017-07-25 15:35:07

MysqlMysql優(yōu)化LIMIT分頁

2009-09-25 10:22:35

Hibernate多表

2024-05-28 08:47:52

2022-09-19 08:41:02

數(shù)據(jù)查詢分離

2020-11-05 10:59:45

Mybatis

2018-09-06 16:46:33

數(shù)據(jù)庫MySQL分頁查詢

2009-09-15 13:28:49

LINQ表間關(guān)系查詢

2020-06-11 08:56:34

數(shù)據(jù)倉庫數(shù)據(jù)庫數(shù)據(jù)

2018-07-11 20:07:06

數(shù)據(jù)庫MySQL索引優(yōu)化

2010-07-16 08:50:00

SQL Server表

2010-04-26 14:24:58

Oracle數(shù)據(jù)庫索引

2010-08-04 11:03:03

DB2數(shù)據(jù)表

2021-05-11 11:05:43

SAL子查詢

2009-11-24 19:40:07

PHP關(guān)聯(lián)數(shù)組查詢結(jié)果

2010-09-26 15:23:24

SQL語句

2010-09-28 15:34:05

SQL表結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美电影在线观看网站 | 欧美日韩成人一区二区 | 久久久久网站 | 日韩在线视频精品 | 国产99热在线 | 精品乱码一区二区三四区 | 亚洲一区在线日韩在线深爱 | 久亚州在线播放 | 日本欧美在线观看视频 | 91久久精品 | 国产成人在线观看免费 | 国产一区二区三区在线观看免费 | 久久综合成人精品亚洲另类欧美 | 美女啪啪国产 | 91视频在线网站 | 另类二区 | 欧美成人a | 男女羞羞在线观看 | 伊人在线 | 在线免费观看黄色 | 免费小视频在线观看 | 国产三级精品三级在线观看四季网 | 99精品在线| 久久亚洲国产精品 | 国产成人精品一区二三区在线观看 | 粉嫩一区二区三区性色av | 国产区免费视频 | 一级午夜aaa免费看三区 | 免费看黄视频网站 | 国产在线不卡视频 | 99精品视频在线 | 久久天堂 | chinese中国真实乱对白 | 午夜影院在线免费观看视频 | 欧美精品一区二区三区在线 | 亚洲综合大片69999 | 亚洲在线免费 | 免费日韩av网站 | 欧美日一区| 亚洲第一av| 日韩欧美在线播放 |