如何定位並優化慢查詢sql(慢查詢語句只會是dml,資料操作語言)
這個問題屬於開放性的題目,具體場景需要具體分析,這裡給個大致思路
根據慢日誌定位慢查詢sql.
使用explain等工具分析sql.
修改sql或者盡量讓sql走索引.
1. 根據慢日誌定位慢查詢sql
慢日誌的作用就是用來記錄執行速度比較慢的sql語句.
然後我們再來看看系統中慢日誌的狀態,輸入語句:show status like '%slow_queries%'進行模糊查詢即可看到當前慢查詢語句的數量
修改慢日誌的設定
2. 使用explain等工具分析sql
explain在分析查詢語句很有用,一般放在select關鍵字前面
explain主要用於描述mysql如何執行查詢操作,即mysql的執行計畫
.
注意: 新增了explain關鍵字以後,sql語句並沒有真正的執行,只是返回了mysql的執行計畫
例如(用的別人的例子):
emmm,我就不去說所有的字段了哈,網上有,我懶得記,等面試問到了我再來看,這裡重點說幾個字段:
rows:這一列是mysql估計要讀取並檢測的行數,注意這個不是結果集裡的行數
tyoe:它表示mysql找到需要資料行的方式,其效能依次從最優到最差分別為:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
其中index和all表示走的是全表掃瞄
當我們發現如果某條語句是慢查詢語句**或者**type值為index/all
,那麼就說明這條語句是可以優化的.
extra:寫的是一些額外資訊,輔助我們了解該語句的執行,它的字段也非常的多,這裡寫兩個很有可能需要被優化的字段,如圖:
3. 修改sql或者盡量讓sql走索引
這是當我們出現慢查詢語句的時候的兩種可選的解決辦法,可以給查詢的字段加索引或者使用其他索引查詢
資料庫考點 1
關係型資料庫和非關係型資料庫的區別 簡單來說 1.關係型資料庫通過外來鍵關聯來建立表與表之間的關係 2.非關係型資料庫通常指資料以物件的形式儲存在資料庫中,而物件之間的關係通過每個物件自身的屬性來決定 比如 有乙個學生的資料 姓名 張三,性別 男,學號 12345,班級 二年級一班 還有乙個班級的資...
資料庫考點 6
myisam和innodb關於鎖方面的區別是什麼 myisam預設使用的是表級鎖,不支援行級鎖.innodb預設使用的是行級鎖,也支援表級鎖.下面的東西針對於myisam引擎 什麼是表級鎖 舉例 前提 我當前有一張表student,使用的是myisam引擎.我們在這裡模擬乙個併發操作哈 當我們對錶進...
資料庫考點 10
next key鎖 行鎖 gap鎖 行鎖 行鎖 即record lock,指對單個行記錄上的鎖.gap鎖 gap lock 間隙鎖 表示鎖定乙個範圍,但不包括記錄本身.其主要目的是為了防止同一事務的兩次當前讀出現幻讀的情況.它在rc及ru隔離級別中是沒有的,在rr以及序列化中預設支援,這就是為啥rc...