?? 魔兽世界祖拉:除了不要 SELECT * ,程序員使用數據庫還應知道的11個技巧! - 祖拉的世界|上古卷轴阿祖拉被口爆

除了不要 SELECT * ,程序員使用數據庫還應知道的11個技巧!

公眾號后臺回復“學習”,獲取作者獨家秘制精品資料

掃描下方海報二維碼,試聽課程:

本文來源:AIOps

應用程序慢如牛,原因多多,可能是網絡的原因、可能是系統架構的原因,還有可能是數據庫的原因。

那么如何提高數據庫SQL語句執行速度呢?有人會說性能調優是數據庫管理員(DBA)的事,然而性能調優跟程序員們也有莫大的關系。

程序中嵌入的一行行的SQL語句,如果使用了一些優化小技巧,定能達到事半功倍的效果。

技巧1 比較運算符能用 “=”就不用“<>”

“=”增加了索引的使用幾率。

技巧2 明知只有一條查詢結果,那請使用 “LIMIT 1”

“LIMIT 1”可以避免全表掃描,找到對應結果就不會再繼續掃描了。

技巧3 為列選擇合適的數據類型

能用TINYINT就不用SMALLINT,能用SMALLINT就不用INT,道理你懂的,磁盤和內存消耗越小越好嘛。

技巧4 將大的DELETE,UPDATE or INSERT 查詢變成多個小查詢

能寫一個幾十行、幾百行的SQL語句是不是顯得逼格很高?然而,為了達到更好的性能以及更好的數據控制,你可以將他們變成多個小查詢。

技巧5 使用UNION ALL 代替 UNION,如果結果集允許重復的話

因為 UNION ALL 不去重,效率高于 UNION。

技巧6 為獲得相同結果集的多次執行,請保持SQL語句前后一致

這樣做的目的是為了充分利用查詢緩沖。

比如根據地域和產品id查詢產品價格,第一次使用了:

img

那么第二次同樣的查詢,請保持以上語句的一致性,比如不要將where語句里面的id和region位置調換順序。

技巧7 盡量避免使用 “SELECT *”

如果不查詢表中所有的列,盡量避免使用 SELECT *

因為它會進行全表掃描,不能有效利用索引,增大了數據庫服務器的負擔,以及它與應用程序客戶端之間的網絡IO開銷。

img

技巧8 WHERE 子句里面的列盡量被索引

只是“盡量”哦,并不是說所有的列。因地制宜,根據實際情況進行調整,因為有時索引太多也會降低性能。

技巧9 JOIN 子句里面的列盡量被索引

同樣只是“盡量”哦,并不是說所有的列。

技巧10 ORDER BY 的列盡量被索引

ORDER BY的列如果被索引,性能也會更好。

技巧11 使用 LIMIT 實現分頁邏輯

不僅提高了性能,同時減少了不必要的數據庫和應用間的網絡傳輸。

技巧12 使用 EXPLAIN 關鍵字去查看執行計劃

EXPLAIN 可以檢查索引使用情況以及掃描的行。

其他

SQL調優方法有很多種,同樣的查詢結果可以有很多種不同的查詢方式。

其實最好的方法就是在開發環境中用最貼近真實的數據集和硬件環境進行測試,然后再發布到生產環境中。

END

如有收獲,請劃至底部,點擊“在看”,謝!

歡迎長按下圖關注公眾號石杉的架構筆記

BAT架構經驗傾囊相授

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容文字的真實性、完整性和原創性本站不作任何保證或承諾,請讀者僅作參考,并自行核實相關內容。

//image99.pinlue.com/thumb/img_jpg/1J6IbIcPCLaDxm2NChBcaL2Ticao4x4oL76NjVVUO6c5wplo4yVmXkciciamAlibFEt5icRqVCZvibI8hZxz9KEjV9Tg/0.jpeg
我要收藏
贊一個
踩一下
分享到
相關推薦
精選文章
?
分享
評論
祖拉的世界