當(dāng)前位置:首頁(yè) >  運(yùn)營(yíng) >  產(chǎn)品運(yùn)營(yíng) >  正文

分享SQL SELECT語(yǔ)句優(yōu)化的5個(gè)簡(jiǎn)單技巧

 2017-02-01 17:47  來(lái)源: 用戶(hù)投稿   我來(lái)投稿 撤稿糾錯(cuò)

  域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)

針對(duì)SQL SELECT語(yǔ)句進(jìn)行性能調(diào)優(yōu)是一個(gè)非常耗時(shí)的工作,可以說(shuō)任何一個(gè)工程都不具備足夠的時(shí)限讓我們來(lái)完成這項(xiàng)工作,因此從日常的編寫(xiě)和測(cè)試過(guò)程中總結(jié)技巧,是當(dāng)前優(yōu)化性能的主要措施。那么有哪些較為快捷的技巧呢?

第一,整理數(shù)據(jù)集大小

當(dāng)庫(kù)表中僅有幾千行數(shù)據(jù)時(shí),查詢(xún)指令總是可以順利執(zhí)行,但是當(dāng)應(yīng)用程度增加,庫(kù)表容量也增加時(shí),查詢(xún)速度自然會(huì)降低不少,面對(duì)這種情況,我們可采取的解決辦法其實(shí)十分簡(jiǎn)單,首先檢查SELECT語(yǔ)句中用到的表是否可以應(yīng)用WHERE子句進(jìn)行過(guò)濾,然后我們的查詢(xún)語(yǔ)句帶有子查詢(xún)時(shí),一定要將其進(jìn)行過(guò)濾,而且過(guò)濾時(shí)針對(duì)的是內(nèi)部語(yǔ)句而不是外部語(yǔ)句。

第二,限定選擇需要的字段

使用帶有報(bào)告和分析功能的應(yīng)用程序時(shí),有時(shí)報(bào)告性能低是因?yàn)閳?bào)告工具必須對(duì)收到的、帶有詳細(xì)形式的數(shù)據(jù)做聚合操作。

偶爾查詢(xún)也可能運(yùn)行地足夠快,但你的問(wèn)題可能是一個(gè)網(wǎng)絡(luò)相關(guān)的問(wèn)題,因?yàn)榇罅康脑敿?xì)數(shù)據(jù)通過(guò)網(wǎng)絡(luò)發(fā)送到報(bào)告服務(wù)器。

當(dāng)使用一個(gè)面向列的DBMS時(shí),只有你選擇的列會(huì)從磁盤(pán)讀取。在你的查詢(xún)中包含的列越少,IO開(kāi)銷(xiāo)就越小。

第三,解除不必要的字段

編寫(xiě)SQL語(yǔ)句是一個(gè)過(guò)程,通常需要大量編寫(xiě)和測(cè)試SQL語(yǔ)句的迭代過(guò)程。開(kāi)發(fā)過(guò)程中,一些同學(xué)常常會(huì)手動(dòng)加入一些額外的表,這些表對(duì)于返回SQL代碼沒(méi)有直接的影響,往往在大家跑完代碼并獲得想要的結(jié)果后忽略了之前加入的這些表和字段。這就好像手機(jī)中的照片,一張兩張?zhí)撚罢掌⒉粫?huì)怎樣,但是它仍舊占據(jù)了我們的內(nèi)存,因此每次運(yùn)行完程序,我都建議大家刪除那些對(duì)最終的返回?cái)?shù)據(jù)沒(méi)有任何影響和作用的表,通過(guò)移除與那些不必要表的JOINS操作,我們可以減少大量數(shù)據(jù)庫(kù)必須執(zhí)行的流程。

第四,移除外部連接查詢(xún)

當(dāng)然這個(gè)方法并不像說(shuō)起來(lái)這么簡(jiǎn)單,能不能采用這種方法完全取決于它所帶來(lái)的影響有多大,即會(huì)改變多少表的內(nèi)容。當(dāng)影響不大時(shí),具體可以這樣操作,在相鄰表中借助占位符進(jìn)行OUTER JOINS刪除操作,比如當(dāng)你有以下的庫(kù)表時(shí),可通過(guò)定義OUTER JOINS來(lái)確保返回所有的數(shù)據(jù):

那么,在customer表的行中增加一個(gè)占位符,并更新sales表中的所有NULL值到占位符就可以有效刪除OUTER JOINS,不僅如此,還能避免其他開(kāi)發(fā)人員編寫(xiě)額外的語(yǔ)句。

第五,刪除JOIN和WHERE子句中的計(jì)算字段

同樣,與上述方法相對(duì)應(yīng)的是,刪除join等字段也要根據(jù)其可能帶來(lái)的調(diào)整大小來(lái)判斷,我們可以將連接語(yǔ)句中用到的計(jì)算字段作為一個(gè)新字段在表中創(chuàng)建。比如下面的SQL語(yǔ)句:

在sales表中利用年和月增加一列,同樣可以提高性能。更新后的SQL語(yǔ)句將如下:

以上內(nèi)容均來(lái)自論文發(fā)表,轉(zhuǎn)載請(qǐng)注明,謝謝。

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)文章

熱門(mén)排行

信息推薦