數據庫MySQL查詢優化那些事兒
量體裁衣
平時我們在從數據庫獲取數據的時候,非常喜歡使用select *來獲取全部數據,這樣當用戶想要什么數據的時候,都可以獲取到,但是這會造成數據獲取時間的增大,正確的做法就是需要什么字段,就寫什么字段,這樣才能避免資源的浪費。
以小博大
當我們想要從兩個不一樣體量的表中獲取數據的時候,我們應該盡量通過小表來進行條件判斷,因為它的行數更少,條件判斷查詢更快。
需要注意的是,in 適合將小表放到條件里面,大表放到外面。而 exists 適合將小表放到前面,而大表放到后面,總之,就是最先通過小表進行查詢過濾。
一氣呵成
很多人喜歡在循環里面操作數據庫,殊不知這是查詢大忌。我們不應該在循環中進行數據庫的操作,因為這會執行很多條 sql 語句,我們應該將要查詢的數據通過循環進行封裝,然后一次性批量地去數據庫進行查詢,通過一氣呵成來查詢。
恰到好處
在很多時候,我們查詢數據的時候僅僅需要一條數據即可,但是很多時候我們卻查詢出了很多條數據。這些不必要的浪費大大增加了數據的開銷,因此在查詢的時候多多使用limit關鍵字是非常有好處的,它會大大縮短查詢時間。
大事化小
當數據很多的時候,我們往往通過分頁來解決查詢數據的問題,但是當總的分頁數據過多的時候,后面查詢的分頁速度會大大降低,這個時候我們可以通過設置查詢條件來降低每次查詢的條件過濾,將大事化小。
select id,name,des from user limit 1000000,20;
select id,name,des from user where id >1000000 limit 20;
擇善而從
在創建數據庫的時候,我們往往喜歡隨意設置字段類型,而且喜歡將它設置得很大,防止以后數據的修改。其實,這是大大的錯誤,數據庫之所以設計了不同類型的字段,就是為了讓我們擇善而從,選擇最適合的類型。
如果字段長度基本固定,那么最好使用 char,否則選擇 varchar,如果字段數據類型可以用數字類型,那么就不要使用字符串類型,因為數字類型的效率更高。對于高精度的數據,我們應該怎么使用 decimal 類型。
遐邇一體
很多時候,我們習慣通過子查詢來查詢數據,因為這樣查詢理解更簡單,但是,這種不是一起查詢的話,會導致查詢效率大大降低,過多的使用子查詢和聯合查詢,就會導致增加查詢開銷,占用更多的存儲空間。
一馬當先
當數據庫中的數據量非常多的時候,而一些字段又是我們經常需要查找的字段的時候,我們就需要選出一些關鍵人物,也就是我們需要設置索引來加速檢索,通過合理的設置索引,我們的查詢將會得到最大程度的優化。?