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

分享SQL SELECT語句優(yōu)化的5個簡單技巧

 2017-02-01 17:47  來源: 用戶投稿   我來投稿 撤稿糾錯

  域名預(yù)訂/競價,好“米”不錯過

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

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

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

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

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

偶爾查詢也可能運行地足夠快,但你的問題可能是一個網(wǎng)絡(luò)相關(guān)的問題,因為大量的詳細數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到報告服務(wù)器。

當(dāng)使用一個面向列的DBMS時,只有你選擇的列會從磁盤讀取。在你的查詢中包含的列越少,IO開銷就越小。

第三,解除不必要的字段

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

第四,移除外部連接查詢

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

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

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

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

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

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

申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

相關(guān)文章

熱門排行

信息推薦