【夯實Mysql基礎】記一次mysql語句的最佳化過程!

來源:互聯網
上載者:User

標籤:plain   targe   art   mysql基礎   查詢最佳化   strong   用戶端   建立索引   分享   

  1. 【事件起因】

 

  今天在做項目的時候,發現提供給用戶端的介面時間很慢,達到了2秒多,我第一時間,抓了介面,看了啟動並執行sql,發現就是 2個sql慢,分別佔了1秒多。

  一個sql是 連結了5個表同時使用了 2個 order by和 1個limit的分頁 sql。

      一個sql是上一個sql的count(*),即連結了5個表,當然沒有limit了(取總數)。

 

  2. 【著手最佳化】

 

    1)【最佳化思路】

        第一條是 做client調用 service層的資料緩衝

        第二條就是 最佳化sql本身。

        這裡著重講一下 最佳化sql本身

 

    2)【使用expain】

        使用 explain語句,查看該語句,

                看著沒有啥毛病啊,使用到了索引,掃描的行數也多,一個 85行,一個338多行,其他的也都是 1行。      3)【使用子查詢最佳化】        使用子查詢進行最佳化,效果差不多,只能想別的辦法    4)【去掉order by排序】        和同事討論時,覺得原來的5張表該加的索引都加了,為什麼速度慢呢,我說裡面還做了排序處理。        說者無心,聽者有意。他說 你去掉排序試試,果然,去掉排序後,時間降到了 0.002秒,快了很多。        但是order by排序為什麼很慢呢,因為 order by的那個欄位也是 有索引的。     5)【建立聯合索引】        後來查詢了下面這篇文章(mysql中提高Order by語句查詢效率的兩個思路分析)才知道, 如果查詢出來的資料量很大的時候,order  by欄位,必須和前面的where語句中的欄位建立 聯合索引才行,同事建立的索引順序還得是 先是 where語句中的欄位最後是 order by中的欄位。    6)【最終方案】         明白了道理,但是鑒於還得麻煩 DBA建立索引為 特定項目建立特定的索引也不划算。這部分資料一遍不經常變動,可以做成緩衝的形式,就作罷了,但是 分析問題的思路和最佳化 sql order的過程還是有收穫的    3. 【參考資料】

【夯實Mysql基礎】記一次mysql語句的最佳化過程!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.