SQL慢查詢優化

2021-07-11 21:10:23 字數 615 閱讀 4638

3月19日,3月20日的18:00-20:00之間,db伺服器的cpu load飆公升

dba提出問題原因是sql

where rest_id=?

and state=?

and id<=?

and valid=?

掃瞄行數太多,執行時間過長

在b端心跳連線時,會傳"queue_marker"引數,含義為上次處理的最後一條請求的id;

1.表結構分析

2.執行計畫分析

可以看到執行計畫是對主鍵索引和rest_id索引做了index merge,由於我們的條件是id <= 3065099,那麼如果走主鍵索引的話,掃瞄索引行數會很多

3.優化策略

1.建立索引:

第一:經常做查詢,連線條件為group by ,order by且區分度較高的的列

第二:經常更新,區分度太低的列,不能作為索引

第三:建立;聯合索引,注意排序(最左字首)

2.複雜sql,先做explain分析計畫,檢視是否有效利用現在的索引,如果沒有則調整索引。

3.出現慢查詢找原因:第一:現根據業務場景角度入手,根據業務邏輯優化sql執行條件(增刪改查語句修改)。第二:已經沒有優化再考慮sql調整索引

sql查詢慢優化

select g.goods id,g.type id,g.user id,g.productname,g.img,g.intro,g.attr,u.companyname,u.enloginname,u.userid from site goods g force,ucenter member u...

SQL優化(二) 慢查詢

mysql的慢查詢日誌是mysql提供的一種日誌記錄方式,它主要是用來記錄mysql執行語句過程中,響應時間超過閥值的語句,這個閥值可以通過long query time去指定,比如說如果我們將long query time指定為5,則意思執行耗時5秒以上的語句都會被我們的慢查詢日誌給記錄下來.通過...

SQL優化(二) 慢查詢

mysql的慢查詢日誌是mysql提供的一種日誌記錄方式,它主要是用來記錄mysql執行語句過程中,響應時間超過閥值的語句,這個閥值可以通過long query time去指定,比如說如果我們將long query time指定為5,則意思執行耗時5秒以上的語句都會被我們的慢查詢日誌給記錄下來.通過...