91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【MySQL】 性能優化之 延遲關聯

發布時間:2020-08-07 17:05:31 來源:ITPUB博客 閱讀:166 作者:yanyumao1984 欄目:MySQL數據庫
【背景】
  某業務數據庫load 報警異常,cpu usr 達到30-40 ,居高不下。使用工具查看數據庫正在執行的sql ,排在前面的大部分是:

  1. SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, back_leaf_category,item_status,picuture_url FROM relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20;
表的數據量大致有36w左右,該sql是一個非常典型的排序+分頁查詢:order by col limit N,OFFSET M , MySQL 執行此類sql時需要先掃描到N行,然后再去取 M行。對于此類大數據量的排序操作,取前面少數幾行數據會很快,但是越靠后,sql的性能就會越差,因為N越大,MySQL 需要掃描不需要的數據然后在丟掉,這樣耗費大量的時間。

【分析】
針對limit 優化有很多種方式,
1 前端加緩存,減少落到庫的查詢操作
2 優化SQL
3 使用書簽方式 ,記錄上次查詢最新/大的id值,向后追溯 M行記錄。
4 使用Sphinx 搜索優化。
對于第二種方式 我們推薦使用"延遲關聯"的方法來優化排序操作,何謂"延遲關聯" :通過使用覆蓋索引查詢返回需要的主鍵,再根據主鍵關聯原表獲得需要的數據。

【解決】
根據延遲關聯的思路,修改SQL 如下:
優化前

點擊(此處)折疊或打開

  1. root@xxx 12:33:48>explain SELECT id, cu_id, name, info, biz_type, gmt_create, gmt_modified,start_time, end_time, market_type, back_leaf_category,item_status,picuture_url FROM relation where biz_type =\'0\' AND end_time >=\'2014-05-29\' ORDER BY id asc LIMIT 149420 ,20;
  2. +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
  3. | id | select_type | table       | type  | possible_keys | key         | key_len | ref  | rows   | Extra                       |
  4. +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
  5. | 1  | SIMPLE      | relation    | range | ind_endtime   | ind_endtime | 9       | NULL | 349622 | Using where; Using filesort |
  6. +----+-------------+-------------+-------+---------------+-------------+---------+------+--------+-----------------------------+
  7. 1 row in set (0.00 sec)
其執行時間:
【MySQL】 性能優化之 延遲關聯
優化后:

點擊(此處)折疊或打開

  1. SELECT a.* FROM relation a, (select id from relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20 ) b where a.id=b.id

  1. root@xxx 12:33:43>explain SELECT a.* FROM relation a, (select id from relation where biz_type ='0' AND end_time >='2014-05-29' ORDER BY id asc LIMIT 149420 ,20 ) b where a.id=b.id;
  2. +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
  3. | id | select_type | table       | type   | possible_keys | key     | key_len | ref  | rows   | Extra |
  4. +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
  5. | 1  | PRIMARY     | <derived2>  | ALL    | NULL          | NULL    | NULL    | NULL | 20     |       |
  6. | 1  | PRIMARY     | a           | eq_ref | PRIMARY       | PRIMARY | 8       | b.id | 1      |       |
  7. | 2  | DERIVED     | relation    | index  | ind_endtime   | PRIMARY | 8       | NULL | 733552 |       |
  8. +----+-------------+-------------+--------+---------------+---------+---------+------+--------+-------+
  9. 3 rows in set (0.36 sec)
執行時間:

【MySQL】 性能優化之 延遲關聯

優化后 執行時間 為原來的1/3 。

如果您覺得從這篇文章受益,可以贊助 北在南方 一瓶飲料 ^_^
【MySQL】 性能優化之 延遲關聯
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

利川市| 垦利县| 仁寿县| 山阴县| 菏泽市| 北票市| 承德县| 昭苏县| 个旧市| 晋江市| 玛纳斯县| 宜章县| 英吉沙县| 夹江县| 察雅县| 孙吴县| 晴隆县| 鲜城| 东乌珠穆沁旗| 雅江县| 乌鲁木齐县| 安义县| 香格里拉县| 杂多县| 丹寨县| 潞西市| 潜江市| 襄垣县| 昌江| 柯坪县| 福泉市| 湘潭市| 微山县| 梅河口市| 江华| 四会市| 北安市| 托里县| 黄山市| 赤水市| 青冈县|