九道門|一日一技:MySQL查詢最佳化

今天小朱老師為大家準備的小知識點是MySQL查詢最佳化,可以幫助大家提升工作效率,減少繁瑣操作,話不多說,下面就一起來學習吧。

九道門|一日一技:MySQL查詢最佳化

1、為什麼查詢速度會慢?

首先我們要明確一個問題,查詢速度慢的原因是什麼?要明確這個問題就要了解查詢的執行邏輯:一個查詢的邏輯是從客戶端開始,到伺服器,在伺服器上進行解析生成執行計劃,然後執行將結果返回給客戶端。其中在”執行“階段包含了大量的資料呼叫以及呼叫之後的資料處理,比如排序和分組。那麼查詢速度慢的原因就是多了某些不必要的操作,或者操作重複、執行較慢等等。最佳化查詢的目的其實也就是減少操作和操作花費的時間。

2、慢查詢基礎:最佳化資料訪問:

效能低下最主要的原因就是訪問的資料量太大,那麼可以從這方面入手:

2.1、確認查詢的資料是否都是需要的

請求多餘的資料會對伺服器造成額外的負擔,消耗大量的記憶體和資源。具體表現在:

1、查詢不需要的記錄:比如我們只需要在前端展示10條資料,但是我們的請求取出了100條。實際上MySQL會取出所有的資料,我們會接收全部的資料,然後拋棄其中一部分資料。這時候可以透過新增limit限制查詢的條數。

2、多表關聯的時候返回全部欄位:

九道門|一日一技:MySQL查詢最佳化

3、總是取出全部的列:每次在使用select * 的時候無法使用索引覆蓋掃描的最佳化,還會增加記憶體、CPU的消耗。獲取並快取額外的列的時候要考慮清楚代價。

4、查詢重複的資料:在資料分析的時候可能需要不斷地重複執行相同的查詢操作,這時候可以將開始的資料快取起來,需要的時候拿過來用即可。

2.2、MySQL是否在掃描額外的記錄

當確定了我們需要的資料之後,就有了三個指標去衡量是否掃描了過多的資料:

查詢時間:包括服務時間和排隊時間的總和

掃描和返回的行數:最理想的情況是掃描和返回的資料行數是相等的,但是一般很難做到,只要控制在1:1-10:1之間即可。

3、重構查詢的方式

我們是應該選擇一個負責的查詢還是多個簡單的查詢?

MySQL內部的掃描速度在上百行,但是MySQL返回給客戶端的資料就會變慢,所以儘量使用查詢比較少的比較好。

分解查詢的方法:

3.1、切分查詢

可以嘗試將大的查詢切分為幾個小的查詢,每個小的查詢功能類似,就可以持續執行小的查詢。比如我們需要刪除大量資料:

九道門|一日一技:MySQL查詢最佳化

每次刪除一萬條資料對伺服器的負擔比較小,注意一點是在刪除之後暫停一下再次執行。

3.2、分解關聯查詢

可以將多表的關聯查詢拆解成多條查詢,其實就是將關聯的步驟放在了應用層。示例:

九道門|一日一技:MySQL查詢最佳化

這樣可以把各種資料快取下來,將來需要的時候可以直接查詢;

在應用層做關聯,可以更容易對資料庫拆分;

減少了冗餘資料的查詢。

這個最佳化小技巧是不是對你有所幫助呢?

今日福利準備是的

《SQL基礎教程(第2版)》

,希望大家在不斷成長的時候也不要忘了鞏固基礎。

九道門|一日一技:MySQL查詢最佳化

頂部