日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 數(shù)據(jù)庫 > 數(shù)據(jù)庫應(yīng)用 > 程序性能優(yōu)化之SQL篇

程序性能優(yōu)化之SQL篇

來源:程序員人生   發(fā)布時間:2015-02-03 08:39:13 閱讀次數(shù):3596次

         如果說功能是程序的軀體,那末性能就是程序的靈魂。完全的功能可以保證程序的軀體是健全的,而良好的性能才是程序靈魂的意味,本文就程序的性能優(yōu)化做簡單的介紹。

        最近對程序的性能的體會尤其深入。最近做了1個數(shù)據(jù)查詢和顯示的功能,從7張表大概1500條數(shù)據(jù)中查詢25條數(shù)據(jù)并且顯示出來,時間消耗1秒鐘。我的計算機參數(shù)為:CPU:i5處理器,4G內(nèi)存。這個履行速度相當(dāng)?shù)穆迷谖也樵兊臄?shù)據(jù)量比較小,等待時間不是很多,但是程序性能優(yōu)化確切迫在眉睫。

        仔細(xì)分析了程序,發(fā)現(xiàn)有很多地方都是需要修改的,我們先從數(shù)據(jù)庫開始。下面先來看1段代碼,這個是程序中的SQL語句:

select {0} from ((((({1} inner join {2}) inner join {3}) inner join {4}) inner join {5}) inner join {6}) inner join {7} where {8} ", "lp.CnName as ProjectCityName,t.TaskName,ls.CnName as StageAreaName,tm.TaskName as TaskTemplateName,t.StartTime,t.RealStartTime,t.EndTime,t.RealEndTime,t.Executor,cc.CnName as CorporationName", "[SubjectDB].[WorkPlan].[Task] as t", "[SubjectDB].[WorkPlan].[Plan] as p on t.PlanCode=p.Code", "[SubjectDB].[WorkPlan].[TemplateTask] as tm on t.TemplateTaskCode = tm.Code", "[SubjectDB].[LandObtained].[ProjectCity] as lp on p.ProjectCityCode = lp.CityCode", "[SubjectDB].[LandObtained].[StageArea] as ls on p.StageAreaCode = ls.Code", "[SubjectDB].[LandObtained].[Corporation_ProjectInfo] as lcp on p.ProjectCode = lcp.ProjectInfoCode", "[SubjectDB].[Common].[Corporation] as cc on lcp.CorporationCode = cc.Code", "t.RealEndTime <= '" + endTime + "'and t.RealStartTime >='" + startTime + "' and t.VersionEndTime is null and p.ProjectCityCode in ('" + strCityCodeIn + "') and t.TaskStatus = '" + taskStatusCode + "' and ( t.TaskName like " + strTaskPointNameIn + ") and t.TemplateTaskCode not in ('" + strTaskPointCodeIn + "')

          分析1下這段代碼,使用了6inner join1in1not in,不固定數(shù)量的likestrTaskPointNameIn還附加了orlike)。首先,數(shù)據(jù)查詢就很費力,這里應(yīng)當(dāng)如何進(jìn)行優(yōu)化呢?數(shù)據(jù)庫的使用在性能上有哪些需要注意的地方呢?

           1   inner joinleft join right join

         1 inner join (等值連接)返回兩個表連接字段相等的記錄

         2 left join (左連接)返回左表中的所有記錄和右表中連接字段相等的記錄

        3  right join (右連接)返回右表中所有記錄和左表中連接字段相等的記錄

如:

A

ID1

Name1

1

a

2

a

3

a

 

 

B

ID2

Name2

1

b

3

b

4

b

 

Innerjoin :

         select * from A inner join B onA.ID  = B.ID

結(jié)果:

ID1

Name1

ID2

Name2

1

a

1

b

3

a

3

b

 

Leftjoin:

Select * from A left join B on A.ID =  B.ID

結(jié)果:

ID1

Name1

 ID2

Name2

1

a

1

b

2

a

null

null

3

a

3

b

 

Rightjoin :

Select * from  A right join Bon A .ID  =  B.ID

結(jié)果:

ID1

Name1

ID2

Name2

1

a

1

b

3

a

3

b

null

null

4

b

 

       這3種表連接方式,不能直接說那個性能最好,1是看功能需要,2是看具體查詢語句。就上面的SQL語句和功能來看,innerjoin應(yīng)當(dāng)是最合適的,1是數(shù)據(jù)量較小,2是不需要過剩數(shù)據(jù)。

2  in   Exists

       另外一個值得討論的地方就是inexists的使用了,這二者是在嵌套查詢的時候使用的。我們先來看它們各自的查詢原理。

        in是把外表和內(nèi)表做hash連接,exists是把外表做loop循環(huán),每次循環(huán)再對內(nèi)表進(jìn)行查詢,1直以來講existsin的查詢方式更快是不準(zhǔn)確的,不同情況結(jié)果也不1樣,并且如果內(nèi)外表數(shù)據(jù)量相1致的情況下,兩種方式效力是相同的。

        現(xiàn)在,我們還是假定有兩個表:

A表:數(shù)據(jù)量較小,B表:數(shù)據(jù)量較大。

 select * from A where cc in(select  cc  from B)

         效力較低,由于in連接使用外表Acc列的索引進(jìn)行loop循環(huán),然后在B表中尋覓等值記錄。

 

         select *  from A where  exists (select  cc from B where  cc = A.cc)

        效力較高,由于使用了Bcc列的索引

    Not   in   not exists

         如果查詢語句使用到了not    in,那末內(nèi)外兩張表都需要全表掃描,沒有用到索引,效力較低;not     exists使用到了索引,所以不管哪一個表大,not     exists效力較高。

       暫時寫到這里吧,下篇文章繼續(xù)繼續(xù)性能優(yōu)化。 

 


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产一区二区三区在线电影 | a√毛片 | 国产免费区一区二区三视频免费 | 日韩在线观看一区 | caoprom超碰| 亚洲国产日韩欧美 | 欧美在线视频免费 | 人人爱av| 亚洲精品成人在线 | 丰满少妇高潮惨叫久久久一 | 亚洲精品在线视频观看 | 国产午夜精品在线观看 | 亚洲精品色综合av网站 | 欧美成网站 | 一区二区免费在线视频 | 久久精品观看 | 国产1区在线 | 亚洲福利网 | 精品一区二区三区免费毛片爱 | 在线v | 最近中文字幕视频在线观看 | 高清欧美精品xxxxx在线看 | 欧美日韩在线综合 | 日本一区二区三区四区 | 欧美一区二区三区在线播放 | www.日韩av.com | 久久美女性网 | 久久久久国产精品 | 欧美性猛xxx| av在线精品 | 欧美a在线| 亚洲二区免费 | 国产一区二区三区欧美 | 香港a毛片免费全部播放 | 97精品国产97久久久久久 | 国产精品一区二区在线看 | 国产一区久久久 | 国产高清一区二区 | 国产日韩欧美日韩 | 人人澡人人透人人爽 | av免费观看网站 |