mysql統計查詢優化 Mysql查詢優化

2021-10-18 11:54:45 字數 2186 閱讀 3155

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化、索引優化和查詢優化

查詢的生命週期大致可以分為,從客戶端、到服務端、在伺服器上解析、生成執行計畫、執行、返回結果給客戶端

sql執行流程

具體優化技巧

1.消除外連線

2.消除子查詢

盡量用join代替子查詢,雖說mysql查詢優化器會進行優化,但是我們自己優化掉以後,也就省去了mysql優化的部分時間,同樣可以提公升效能

3.消除連線

盡量單錶查詢,或者使用常量

4.只查詢需要的字段

節省流量,減少mysql讀取資料的量,有些時候能利用索引覆蓋

5.避免使用count(*)

統計操作可以放到從庫中進行

6.避免多餘的排序

如果沒有索引,排序會使用filesort(記憶體或者磁碟),在不需要排序時不要排序,group by 會預設按照分組字段排序,可以使用order by null來禁止排序

7.盡量不要在db裡面進行排序

同上,1000條以內的資料的排序,盡量在應用層做,應用層方便做集群,cpu和記憶體都很容易擴充套件

8.不要在db裡面進行複雜計算

計算密集型任務放到應用層做,應用層可以方便的做集群,計算能力很容易擴充套件

9.避免全模糊或者字首模糊查詢

無法使用索引

10.使用in代替or

當where字句中存在多個條件以「或」並存的時候,mysql的查詢優化器並沒有很好的解決其執行計畫優化問題,再加上mysql特有的sql與storage

分層架構方式,造成其效能比較低下,可以使用union all或者是union(去重、排序)的方式代替「or」會得到更好的效果

11.禁止隱式轉換,數值型別禁止加引號,字串必須加引號

隱式轉換需要消耗cpu計算資源,應避免db做計算任務

12.禁止使用負向查詢,如not in、!=、not like

無法使用索引

13.慎重選擇select for update

加鎖造成阻塞

14.盡量是用union all代替union

union和union all的差異主要是前者需要將兩個(多個)結果集合合併後再進行唯一性過濾操作,這就會涉及到排序,增加大量的cpu運算,加大資源消耗及延遲。

所以當可以確認不可能出現重複結果集或者不在乎重複結果集的時候,盡量使用union all代替union

15.盡量早過濾

將過濾性好(可以排除更多的資料)的條件放的更靠前;mysql的查詢是巢狀查詢,第一層的資料越少,查詢效率越高。

16.禁止在主庫執行統計類query

統計操作可以放到從庫中進行

17.索引覆蓋

由於索引的資料結構也是b+tree,key是索引欄位的值,value是聚集索引的值,所以如果查詢的字段都是索引字段,則直接從索引的資料結構中就可以取到字段值,而不用再去根據聚集索引去查詢整行的資料。

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...

mysq基礎優化

skip name resolve skip locking skip innodb skip bdb key buffer 1g記憶體推薦設定為256m,2g記憶體推薦設定為512m wait timeout 3或者5 2g記憶體推薦設定為5 max connections 如果訪問量很大可以設定...

MYSQL 統計查詢

mysql 統計查詢 mysql查詢統計報表 獲取當前時間截 html view plaincopyprint?select unix timestamp now 獲取當天零時時間截 html view plaincopyprint?select unix timestamp curdate 統計當...