MySQL學習筆記 查詢效能優化

2021-08-20 18:32:05 字數 987 閱讀 2496

查詢效能低下最根本的原因就是訪問的資料太多,大部分效能低下的查詢都可以通過減少訪問的資料量進行優化。

一般有效的分析步驟如下:

優化有問題的查詢時,目標應該是找到乙個更優的方法獲取實際需要的資料,而不是一定總是從mysql獲取一模一樣的結果集。

優點: - 快取效率更高。許多應用程式可以方便地快取單錶查詢對應的結果。 - 將查詢分解後,執行單個查詢可以減少鎖的競爭。 - 查詢本身的效率也可能有所提公升。 - 在應用層做關聯,可以更容易的對資料進行拆分,更容易做到高效能和可擴充套件。 - 可以減少冗餘記錄的查詢。

再整理優化策略分為兩種:一是靜態優化,二是動態優化。靜態優化是直接對解析樹進行分析,並完成優化。靜態優化不依賴於特別的數值。靜態優化在第一次完成後就一直有效,是一種「編譯時優化」。動態優化則和查詢的上下文有關,是一種「執行時優化」。mysql對查詢的靜態優化只需要做一次,但對查詢的動態優化則在每次執行時都需要重新評估。

mysql能處理的查詢型別:

排序是乙個成本很高的操作,所以從效能上考慮,應盡可能避免排序或者盡可能避免對大量資料進行排序。mysql可以通過索引進行排序,當不能使用索引生成排序結果時,則需要mysql自己排序。

mysql兩種排序演算法:

count()有兩種不同的作用:統計某個列值的數量(count(col)),或者可以統計結果集的行數(count(*))。在統計列值時要求列值是非空的(即不統計值為null的行)。在執行count()的時候,萬用字元並不會擴充套件成所有列,實際上,它會忽略所有的列而直接統計行數。

myisam的count()函式執行的非常快,但這是有前提的,即如果沒有任何where條件,myisam的count()才會非常快。因為此時無須實際的去遍歷表來獲得行數,mysql可以利用myisam儲存引擎的特性來直接獲得這個值(myisam會儲存表的行數)。如果mysql知道某列col非空,則mysql內部會將count(col)優化為count(*)。

當統計帶有where子句的行數時,myisam的count()和其它儲存引擎沒有任何區別,都需要遍歷整張表。

Mysql學習筆記(二) 查詢效能優化 一

1.只查詢需要的資料。這個意思是指不要做返回大量結果然後在應用層進行篩選然後只選擇了一部分。比如需要查詢記錄的前10條,返回了1000條,然後選擇了10條就關閉了結果集。這樣做會使得資源浪費在網路資料傳輸上面。2.多表關聯返回需要的列 多表關聯的時候切記不要返回全部的列,選擇需要的列返回,而不是簡單...

mysql查詢效能優化 MySQL 查詢效能優化

在日常開發中,程式設計師寫的最多的除了bug之外,應該算是sql語句了。sql的質量影響了程式的響應速度,只有利用mysql的特性,才能讓mysql更有效的執行查詢sql,充分發揮mysql的優勢,並避開它的弱點。為什麼查詢速度會慢?在編寫sql之前,需要清楚一點 真正重要的是響應時間。如果我們把查...

mysql 查詢效能優化

mysql 執行查詢,客戶端向 mysql 傳送請求的時候,mysql 伺服器執行一系列過程,保證查詢語句在 mysql 中得到最高效能的效率。客戶端傳送一條查詢給伺服器 2 伺服器先檢查查詢快取,如果命中了快取,則返回儲存在快取中的結果。否則,進入下乙個階段。3 伺服器進行 sql解析 預處理,再...