国产免费观看青青草原网站_久久精品视频色悠悠_影音先锋激情5566_日本一區二區三區免費高清在線_麻豆精品一区综合av_丰满的大屁股一区二区_男女啪啪免费网站_草莓视频app在线观看下载_午夜寂寞少妇AA片_混乱的生物课月老师后续视频

 
您現(xiàn)在的位置:首頁(yè) ? 知識(shí)庫(kù) ? 軟件開(kāi)發(fā) 軟件開(kāi)發(fā)
mysql 常見(jiàn)的sql語(yǔ)句優(yōu)化分析
發(fā)布日期:2018-11-16

sql優(yōu)化問(wèn)題 

sql語(yǔ)句性能達(dá)不到你的要求,執(zhí)行效率讓你忍無(wú)可忍,一般會(huì)時(shí)下面幾種情況。 

§                                 網(wǎng)速不給力,不穩(wěn)定。 

§                                 服務(wù)器內(nèi)存不夠,或者SQL 被分配的內(nèi)存不夠。 

§                                 sql語(yǔ)句設(shè)計(jì)不合理 

§                                 沒(méi)有相應(yīng)的索引,索引不合理 

§                                 沒(méi)有有效的索引視圖

§                                 表數(shù)據(jù)過(guò)大沒(méi)有有效的分區(qū)設(shè)計(jì)

§                                 數(shù)據(jù)庫(kù)設(shè)計(jì)太2,存在大量的數(shù)據(jù)冗余

§                                 索引列上缺少相應(yīng)的統(tǒng)計(jì)信息,或者統(tǒng)計(jì)信息過(guò)期

§                                 ....

那么我們?nèi)绾谓o找出來(lái)導(dǎo)致性能慢的的原因呢?

§                                 首先你要知道是否跟sql語(yǔ)句有關(guān),確保不是機(jī)器開(kāi)不開(kāi)機(jī),服務(wù)器硬件配置太差,沒(méi)網(wǎng)你說(shuō)p

§                                 接著用sql性能檢測(cè)工具--sql server profiler,分析出sql慢的相關(guān)語(yǔ)句,就是執(zhí)行時(shí)間過(guò)長(zhǎng),占用系統(tǒng)資源,cpu過(guò)多的

§                                 然后是這篇文章要說(shuō)的,sql優(yōu)化方法跟技巧,避免一些不合理的sql語(yǔ)句,取暫優(yōu)sql

§                                 再然后判斷是否使用啦,合理的統(tǒng)計(jì)信息。sql server中可以自動(dòng)統(tǒng)計(jì)表中的數(shù)據(jù)分布信息,定時(shí)根據(jù)數(shù)據(jù)情況,更新統(tǒng)計(jì)信息,是很有必要的

§                                 確認(rèn)表中使用啦合理的索引

§                                 數(shù)據(jù)太多的表,要分區(qū),縮小查找范圍

分析比較執(zhí)行時(shí)間計(jì)劃讀取情況

select * from dbo.Product

執(zhí)行上面語(yǔ)句一般情況下只給你返回結(jié)果和執(zhí)行行數(shù),那么你怎么分析呢,怎么知道你優(yōu)化之后跟沒(méi)有優(yōu)化的區(qū)別呢。

下面給你說(shuō)幾種方法。

1.查看執(zhí)行時(shí)間和cpu占用時(shí)間

set statistics time on

select * from dbo.Product

set statistics time off

 

打開(kāi)你查詢(xún)之后的消息里面就能看到啦。

2.查看查詢(xún)對(duì)I/0的操作情況

set statistics io on

select * from dbo.Product

set statistics io off

 

執(zhí)行之后

掃描計(jì)數(shù):索引或表掃描次數(shù)

邏輯讀取:數(shù)據(jù)緩存中讀取的頁(yè)數(shù)

物理讀?。簭拇疟P(pán)中讀取的頁(yè)數(shù)

預(yù)讀:查詢(xún)過(guò)程中,從磁盤(pán)放入緩存的頁(yè)數(shù)

lob邏輯讀?。簭臄?shù)據(jù)緩存中讀取,image,text,ntext或大型數(shù)據(jù)的頁(yè)數(shù)

lob物理讀取:從磁盤(pán)中讀取,image,textntext或大型數(shù)據(jù)的頁(yè)數(shù)

lob預(yù)讀:查詢(xún)過(guò)程中,從磁盤(pán)放入緩存的imagetext,ntext或大型數(shù)據(jù)的頁(yè)數(shù)

如果物理讀取次數(shù)和預(yù)讀次說(shuō)比較多,可以使用索引進(jìn)行優(yōu)化。

如果你不想使用sql語(yǔ)句命令來(lái)查看這些內(nèi)容,方法也是有的,哥教你更簡(jiǎn)單的。

 

查詢(xún)--->>查詢(xún)選項(xiàng)--->>高級(jí)

被紅圈套上的2個(gè)選上,去掉sql語(yǔ)句中的set statistics io/time on/off 試試效果。哦也,你成功啦。。

3.查看執(zhí)行計(jì)劃,執(zhí)行計(jì)劃詳解

 

選中查詢(xún)語(yǔ)句,點(diǎn)擊

然后看消息里面,會(huì)出現(xiàn)下面的圖例

select查詢(xún)藝術(shù)

1.保證不查詢(xún)多余的列與行。

§                                 盡量避免select * 的存在,使用具體的列代替*,避免多余的列

§                                 使用where限定具體要查詢(xún)的數(shù)據(jù),避免多余的行

§                                 使用top,distinct關(guān)鍵字減少多余重復(fù)的行

2.慎用distinct關(guān)鍵字

distinct在查詢(xún)一個(gè)字段或者很少字段的情況下使用,會(huì)避免重復(fù)數(shù)據(jù)的出現(xiàn),給查詢(xún)帶來(lái)優(yōu)化效果。

 

但是查詢(xún)字段很多的情況下使用,則會(huì)大大降低查詢(xún)效率。

由這個(gè)圖,分析下:

很明顯帶distinct的語(yǔ)句cpu時(shí)間和占用時(shí)間都高于不帶distinct的語(yǔ)句。原因是當(dāng)查詢(xún)很多字段時(shí),如果使用distinct,數(shù)據(jù)庫(kù)引擎就會(huì)對(duì)數(shù)據(jù)進(jìn)行比較,過(guò)濾掉重復(fù)數(shù)據(jù),然而這個(gè)比較,過(guò)濾的過(guò)程則會(huì)毫不客氣的占用系統(tǒng)資源,cpu時(shí)間。

3.慎用union關(guān)鍵字

此關(guān)鍵字主要功能是把各個(gè)查詢(xún)語(yǔ)句的結(jié)果集合并到一個(gè)結(jié)果集中返回給你。用法

<select 語(yǔ)句1>

union

<select 語(yǔ)句2>

union

<select 語(yǔ)句3>

...

滿(mǎn)足union的語(yǔ)句必須滿(mǎn)足:1.列數(shù)相同。 2.對(duì)應(yīng)列數(shù)的數(shù)據(jù)類(lèi)型要保持兼容。

執(zhí)行過(guò)程:

依次執(zhí)行select語(yǔ)句-->>合并結(jié)果集--->>對(duì)結(jié)果集進(jìn)行排序,過(guò)濾重復(fù)記錄。

select * from

(( orde o left join orderproduct op on o.orderNum=op.orderNum )

inner join product p on op.proNum=p.productnum) where p.id<10000

union

select * from

(( orde o left join orderproduct op on o.orderNum=op.orderNum )

inner join product p on op.proNum=p.productnum) where p.id<20000 and p.id>=10000

union

select * from

(( orde o left join orderproduct op on o.orderNum=op.orderNum )

inner join product p on op.proNum=p.productnum) where p.id>20000

---這里可以寫(xiě)p.id>100 結(jié)果一樣,因?yàn)楹Y選過(guò)

----------------------------------對(duì)比上下兩個(gè)語(yǔ)句-----------------------------------------

select * from

(( orde o left join orderproduct op on o.orderNum=op.orderNum )

inner join product p on op.proNum=p.productnum)

由此可見(jiàn)效率確實(shí)低,所以不是在必要情況下避免使用。其實(shí)有他執(zhí)行的第三部:對(duì)結(jié)果集進(jìn)行排序,過(guò)濾重復(fù)記錄。就能看出不是什么好鳥(niǎo)。然而不對(duì)結(jié)果集排序過(guò)濾,顯然效率是比union高的,那么不排序過(guò)濾的關(guān)鍵字有嗎?答,有,他是union all,使用union all能對(duì)union進(jìn)行一定的優(yōu)化。。

4.判斷表中是否存在數(shù)據(jù)

select count(*) from product

select top(1) id from product

很顯然下面完勝

5.連接查詢(xún)的優(yōu)化

首先你要弄明白你想要的數(shù)據(jù)是什么樣子的,然后再做出決定使用哪一種連接,這很重要。

各種連接的取值大小為:

§                                 內(nèi)連接結(jié)果集大小取決于左右表滿(mǎn)足條件的數(shù)量

§                                 左連接取決與左表大小,右相反。

§                                 完全連接和交叉連接取決與左右兩個(gè)表的數(shù)據(jù)總數(shù)量

select * from

( (select * from orde where OrderId>10000) o left join orderproduct op on o.orderNum=op.orderNum )

select * from

( orde o left join orderproduct op on o.orderNum=op.orderNum )

where o.OrderId>10000

由此可見(jiàn)減少連接表的數(shù)據(jù)數(shù)量可以提高效率。


總結(jié)

 

優(yōu)化,最重要的是在于你平時(shí)設(shè)計(jì)語(yǔ)句,數(shù)據(jù)庫(kù)的習(xí)慣,方式。如果你平時(shí)不在意,匯總到一塊再做優(yōu)化,你就需要耐心的分析,然而分析的過(guò)程就看你的悟性,需求,知識(shí)水平啦。

  • 1.公司登記注冊(cè)于2003年1月27日,清遠(yuǎn)市桑達(dá)電子網(wǎng)絡(luò)媒體有限公司
    2.公司2006年起成為清遠(yuǎn)市政府定點(diǎn)協(xié)議供貨商,電子采購(gòu)供貨商
    3.公司2007年被清遠(yuǎn)市相關(guān)政府部門(mén)評(píng)為安防行業(yè)狀元
    4.公司2007年起成為長(zhǎng)城電腦清遠(yuǎn)如意服務(wù)站(SP368)
    5.公司2007年承建清遠(yuǎn)市橫河路口電子警察工程,開(kāi)創(chuàng)清遠(yuǎn)電子警察先河。
  • 6.公司2007年起成為IBM合作伙伴、公司2010年底成為金蝶軟件清遠(yuǎn)金牌代理(伙伴編號(hào):30030013)
    7.公司組團(tuán)隊(duì)參加南方都市報(bào)組織的創(chuàng)富評(píng)選,獲廣東80強(qiáng)。公司申請(qǐng)多項(xiàng)軟件著作權(quán)、專(zhuān)利權(quán)
    8.2016年起公司成為粵東西北地區(qū)為數(shù)不多的雙軟企業(yè),確立“讓軟件驅(qū)動(dòng)世界,讓智能改變生活!"企業(yè)理想
    9.2016-01-29更名為廣東互動(dòng)電子網(wǎng)絡(luò)媒體有限公司
    10.2021-01-13更名為廣東互動(dòng)電子有限公司
  • 投資合作咨詢(xún)熱線(xiàn)電話(huà):0763-3391888 3323588
  • 做一個(gè)負(fù)責(zé)任的百年企業(yè)! 天行健,君子以自強(qiáng)不息;地勢(shì)坤,君子以厚德載物;
    為用戶(hù)創(chuàng)造價(jià)值! 讓軟件驅(qū)動(dòng)世界; 讓智能改變生活; 超越顧客期望,幫助顧客成功;
    對(duì)客戶(hù)負(fù)責(zé),對(duì)員工負(fù)責(zé),對(duì)企業(yè)命運(yùn)負(fù)責(zé)!幫助支持公司的客戶(hù)成功;幫助忠誠(chéng)于公司的員工成功!
  • 聯(lián)系電話(huà):0763-3391888 3323588 3318977
    服務(wù)熱線(xiàn):18023314222 QQ:529623964
  • 工作QQ:2501204690 商務(wù)QQ: 602045550
    投資及業(yè)務(wù)投訴QQ: 529623964
    微信:小米哥 微信號(hào):qysed3391888
    騰訊微博:桑達(dá)網(wǎng)絡(luò)-基石與起點(diǎn)
  • E-MAIL:222#QYSED.CN ok3391888#163.com (請(qǐng)用@替換#)
在線(xiàn)客服
  • 系統(tǒng)集成咨詢(xún)
    點(diǎn)擊這里給我發(fā)消息
  • 網(wǎng)站\微信\軟件咨詢(xún)
    點(diǎn)擊這里給我發(fā)消息
  • 售后服務(wù)
    點(diǎn)擊這里給我發(fā)消息
  • 投資合作
    點(diǎn)擊這里給我發(fā)消息