SQL语句执行效率3799.docx
《SQL语句执行效率3799.docx》由会员分享,可在线阅读,更多相关《SQL语句执行效率3799.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQL语句执行效率SQL语句中,IN、EXISTS、NOT IN、NOT EXISTS的效率较低,尤其是后两种语句,当数据量较大时,更常给人一种死机般的感觉。本文提供一种使用连接的方法代替以上的四种语句,可大副提高SQL语句的运行效率。以NOT IN为例,当数据量达到一万时,效率可提高20倍,数据量越大,效率提高的幅度也就越大。1)SELLECTT语句中中的中的的效率提提高方法法 SQL语句句如下:CREATTE TTABLLE TTAB11(COL1 VARRCHAAR(220) NOTT NUULL,COL2 INTTEGEER,PRIMAARY KEYY(COOL1);CREATTE T
2、TABLLE TTAB22(COL1 VARRCHAAR(220) NOTT NUULL,PRIMAARY KEYY(COOL1);CREATTE TTABLLE TTAB33(COL1 VARRCHAAR(220) NOTT NUULL,PRIMAARY KEYY(COOL1);下面,我们们将举22个例子子来具体体说明使使用连接接替换IIN、NNOT IN、EEXISSTS、NNOT EXIISTSS的方法法。读取表11中第22列(CCOL22)数据据的总和和,且其其第1列列数据存存在于表表2的第第1列中中。1. 使用用IN的的SQLL语句:SELECCT SSUM(COLL2) FROOM
3、 TTAB11 WHHEREE COOL1 IN(SELLECTT COOL1 FROOM TTAB22)2. 使用用EXIISTSS的SQQL语句句:SELECCT SSUM(COLL2) FROOM TTAB11 WHHEREE EXXISTTS(SSELEECT * FFROMM TAAB2 WHEERE TABB1.CCOL11=TAAB2.COLL1)3. 使用用连接的的SQLL语句:SELECCT SSUM(A.CCOL22) FFROMM TAAB1 A,TTAB22 B WHEREE A.COLL1=BB.COOL1读取表11中第22列(CCOL22)数据据的总和和,且其其第1
4、列列数据不不存在于于表2的的第1列列中。1. 使用用NOTT INN的SQQL语句句:SELECCT SSUM(COLL2) FROOM TTAB11 WHHEREE COOL1 NOTT INN(SEELECCT CCOL11 FRROM TABB2)2. 使用用NOTT EXXISTTS的SSQL语语句:SELECCT SSUM(COLL2) FROOM TTAB11 WHHEREE NOOT EEXISSTS(SELLECTT * FROOM TTAB22 WHHEREE TAB1.COLL1=TTAB22.COOL1)3. 使用用外连接接的SQQL语句句:SELECCT SSUM(A.
5、CCOL22) FFROMM TAAB1 A,TTAB22 B WHEERE A.CCOL11=B.COLL1(+) AAND B.CCOL11 ISS NUULL2) DEELETTE语句句中的效效率提高高方法 SQL语句句如下: CREATTE TTABLLE TTA(CA INNT)CREATTE TTABLLE TTB(CA INNT)CREATTE TTABLLE TTC(CA INNT)1 用IIN的SSQL语语句:DELETTE FFROMM TAA WHHEREE TAA.CAA INN (SSELEECT CA FROOM TTB)2 用EEXISSTS的的SQLL语句:DE
6、LETTE FFROMM TAA WHHEREE EXXISTTS (SELLECTT * FROOM TTB WWHERRE TTB.CCA=TTA.CCA)3 使用用连接的的SQLL语句:DELETTE TTA FFROMM TAA,TBB WHHEREE TAA.CAA=TBB.CAA删除表AA中表AA存在但但表B中中不存在在的数据据1. 使用用IN的的SQLL语句:DELETTE FFROMM TAA WHHEREE TAA.CAA NOOT IIN (SELLECTT CAA FRROM TB)2. 使用用EXIISTSS的SQQL语句句:DELETTE FFROMM TAA WHH
7、EREE NOOT EEXISSTS (SEELECCT CCA FFROMM TBB WHHEREE TBB.CAA=TAA.CAA)3. 使用用连接的的SQLL语句:DELETTE TTA FFROMM TAA LEEFT OUTTER JOIIN TTB OON TTA.CCA=TTB.CCA WWHERRE TTB.CCA IIS NNULLL 3) UPPDATTE语句句中的效效率提高高方法更新表A中中表A和和表B相相同的数数据1. 使用用IN的的SQLL语句:UPDATTE TTA SSET CA=CA+100000 WHEERE CA IN (SEELECCT CCA FFROM
8、M TBB)2. 使用用EXIISTSS的SQQL语句句:UPDATTE TTA SSET CA=CA+100000 WHEERE EXIISTSS (SSELEECT CA FROOM TTB WWHERRE TTB.CCA=TTA.CCA)3. 使用用连接的的SQLL语句:UPDATTE TTA SSET TA.CA=TA.CA+100000 FROOM TTA,TTB WWHERRE TTA.CCA=TTB.CCA更新表A中中表A存存在但表表B中不不存在的的数据1. 使用用IN的的SQLL语句:UPDATTE TTA SSET CA=CA+100000 WHEERE CA NOTT IN
9、N (SSELEECT CA FROOM TTB)2. 使用用EXIISTSS的SQQL语句句:UPDATTE TTA SSET CA=CA+100000 WHEERE NOTT EXXISTTS (SELLECTT CAA FRROM TB WHEERE TB.CA=TA.CA)3. 使用用连接的的SQLL语句:UPDATTE TTA SSET TA.CA=TA.CA+100000 FROOM TTA LLEFTT OUUTERR JOOIN TB ON TA.CA=TB.CA WHEERE TB.CA IS NULLL=方法一、尽尽量使用用复杂的的SQLL来代替替简单的的一堆 SQLL.
10、同样的事务务,一个个复杂的的SQLL完成的的效率高高于一堆堆简单SSQL完完成的效效率。有有多个查查询时,要要善于使使用JOOIN。 oRs=ooConnn.EExeccutee(SSELEECT * FFROMM Boookss) whilee noot ooRs.Eoff strSQQL = SSELEECT * FFROMM Auuthoors WHEERE AutthorrID=&ooRs(AuuthoorIDD) oRss2=ooConnn.EExeccutee(sttrSQQL) Respoonsee.wrritee oRRs(Tittle)&oRRs2(Naame)&qq uoo
11、t;oRs.MMoveeNexxt() wend 要比下面的的代码慢慢: strSQQL=SELLECTT Boookss.Tiitlee,Auuthoors.Namme FFROMM Boookss JOOIN Autthorrs OON AAuthhorss.AuuthoorIDD=Boookss.AuuthoorIDD oRs=ooConnn.EExeccutee(sttrSQQL) whilee noot ooRs.Eoff Respoonsee.wrritee oRRs(Tittle)&oRRs(Namme)&quu ott; oRs.MMoveeNexxt() wend 方法二、尽
12、尽量避免免使用可可更新 Reccorddsett oRs=ooConnn.EExeccutee(SSELEECT * FFROMM Auuthoors WHEERE AutthorrID=17,3,3)oRs(Namme)=DDarkkMannoRs.UUpdaate()要比下面的的代码慢慢:strSQQL = UUPDAATE Autthorrs SSET Namme=DarrkMaan WHEERE AutthorrID=17oConnn.Exxecuute strrSQLL方法三、更更新数据据库时,尽尽量采用用批处 理更新新将所有的SSQL组组成一个个大的批批处理SSQL,并并一次运运行
13、;这这比一个个一个地地更新数数据要有有效率得得多。这这样也更更加满足足你进行行事务处处理 的的需要:strSQQL=strSQQL=sstrSSQL&SEET XXACTT_ABBORTT ONNn;strSQQL=sstrSSQL&BEEGINN TRRANSSACTTIONNn;strSQQL=sstrSSQL&INNSERRT IINTOO Orrderrs(OOrdIID,CCusttID,OrddDatt) VVALUUES(99999,112344,GGETDDATEE()n;strSQQL=sstrSSQL&INNSERRT IINTOO OrrderrRowws(OOrdIID
14、,OOrdRRow,Iteem,QQty) VAALUEES(99999,011,G43385,5)n;strSQQL=sstrSSQL&INNSERRT IINTOO OrrderrRowws(OOrdIID,OOrdRRow,Iteem,QQty) VAALUEES(99999,022,G47726,1)n;strSQQL=sstrSSQL&COOMM999v TRAANSAACTIIONn;strSQQL=sstrSSQL&SEET XXACTT_ABBORTT OFFFnn;oConnn.Exxecuute(strrSQLL);其中,SEET XXACTT_ABBORTT OFFF 语
15、语句告诉诉SQLL Seerveer,如如果下面面的事务务处理过过程中,如如果遇到到错误,就就取消已已经完成成的事务务。方法四、数数据库索索引那些将在WWherre子句句中出现现的字段段,你应应该首先先考虑建建立索引引;那些些需要排排序的字字段,也也应该在在考虑之之列 。在MS AAcceess中中建立索索引的方方法:在在Acccesss里面选选择需要要索引的的表,点点击“设计”,然后后设置相相应字段段的索引引.在MS SSQL Serrverr中建立立索引的的方法:在SQQL SServver管管理器中中,选择择相应的的表,然然后“设计表表”,点击击右键,选选择“Prooperrtiees”
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 执行 效率 3799
限制150内