国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

Mysql表關(guān)聯(lián)字段未建索引導(dǎo)致查詢慢 優(yōu)化后查詢效率顯著提升

2024-07-24 12:35:14
字體:
供稿:網(wǎng)友
  今天收到用戶反饋前端頁(yè)面打開很慢。數(shù)據(jù)庫(kù)服務(wù)器負(fù)載也告警了。
  登錄服務(wù)器查詢Mysql占用CPU過高,很直接打開show full process 跟慢查詢發(fā)現(xiàn)很多以下sql都是在10S以上
  # User@Host: gyw[gwy] @  [x.x.x.x]  Id: 19513
  # Query_time: 11.326904  Lock_time: 0.000327 Rows_sent: 69  Rows_examined: 1417696
  SET timestamp=1504507662;
  SELECT odet.seller AS sellerId,
             odet.agreementprice_id AS agreementpriceId,
             odet.customer_id AS customerId,
         (SELECT realname
            FROM sys_user suser
           WHERE suser.id = odet.seller)
            AS sellerName,
         odet.pkgticket_id AS pkgId,
         odet.pkgticket_price AS pkgPrice,
         DATE_FORMAT(odet.sell_time, '%Y-%m-%d') AS sellTime,
           sum(oct.tourist_number-IFNULL(ort.tourist_remain,0)) as totalPeople,
       sum((oct.tourist_number-IFNULL(ort.tourist_remain,0))*odet.pkgticket_price) as totalMoney,
         (SELECT name
            FROM scenic_pkgticket spkg
           WHERE spkg.id = odet.pkgticket_id)
            AS pkgticketName
    FROM  order_detail odet,order_checkticket oct
          LEFT JOIN order_refundticket ort
          on oct.id = ort.id
     WHERE odet.id=oct.order_detail_id
             and odet.scenic_id = 215
             and odet.sell_time >= '2017-09-04 00:00:00'
             and odet.sell_time <= '2017-09-04 23:59:59'
             GROUP BY sellerId, sellTime, pkgId, pkgPrice
             WITH ROLLUP;
 
 
  手動(dòng)查看一下執(zhí)行計(jì)劃發(fā)現(xiàn),使用Using temporary; Using filesort使用到了臨時(shí)表,這樣效率是最差的
  explain SELECT odet.seller AS sellerId,
      ->        odet.agreementprice_id AS agreementpriceId,
      ->        odet.customer_id AS customerId,
      ->        (SELECT realname FROM sys_user suser WHERE suser.id = odet.seller) AS sellerName,
      ->        odet.pkgticket_id AS pkgId,
      ->        odet.pkgticket_price AS pkgPrice,
      ->        DATE_FORMAT(odet.sell_time, '%Y-%m-%d') AS sellTime,
      ->        sum(oct.tourist_number - IFNULL(ort.tourist_remain, 0)) as totalPeople,
      ->        sum((oct.tourist_number - IFNULL(ort.tourist_remain, 0)) *
      ->            odet.pkgticket_price) as totalMoney,
      ->        (SELECT name
      ->           FROM scenic_pkgticket spkg
      ->          WHERE spkg.id = odet.pkgticket_id) AS pkgticketName
      ->   FROM order_detail odet, order_checkticket oct
      ->   LEFT JOIN order_refundticket ort
      ->     on oct.id = ort.id
      ->  WHERE odet.id = oct.order_detail_id
      ->    and odet.scenic_id = 215
      ->    and odet.sell_time >= '2017-09-04 00:00:00'
      ->    and odet.sell_time <= '2017-09-04 23:59:59'
      ->  GROUP BY sellerId, sellTime, pkgId, pkgPrice WITH ROLLUP;
  +----+--------------------+-------+--------+---------------+---------+---------+----------------------------+--------+---------------------------------+
  | id | select_type        | table | type   | possible_keys | key     | key_len | ref                        | rows   | Extra                           |
  +----+--------------------+-------+--------+---------------+---------+---------+----------------------------+--------+---------------------------------+
  |  1 | PRIMARY            | oct   | ALL    | NULL          | NULL    | NULL    | NULL                       | 414589 | Using temporary; Using filesort |
  |  1 | PRIMARY            | ort   | eq_ref | PRIMARY       | PRIMARY | 8       | sd_ets.oct.id              |      1 | NULL                            |
  |  1 | PRIMARY            | odet  | eq_ref | PRIMARY       | PRIMARY | 8       | sd_ets.oct.order_detail_id |      1 | Using where                     |
  |  3 | DEPENDENT SUBQUERY | spkg  | eq_ref | PRIMARY       | PRIMARY | 8       | func                       |      1 | NULL                            |
  |  2 | DEPENDENT SUBQUERY | suser | eq_ref | PRIMARY       | PRIMARY | 8       | func                       |      1 | NULL                            |
  +----+--------------------+-------+--------+---------------+---------+---------+----------------------------+--------+---------------------------------+
 
 
  嘗試在在order_detail 上加一個(gè)復(fù)合索引(scenic_id,sell_time),但是依然如此未走索引,仔細(xì)檢查發(fā)現(xiàn)order_checkticket order_detail_id未建索引。加上索引后執(zhí)行計(jì)劃如下
  +----+--------------------+-------+--------+-------------------------+-----------------+---------+----------------+------+--------------------------------------------------------+
  | id | select_type        | table | type   | possible_keys           | key             | key_len | ref            | rows | Extra                                                  |
  +----+--------------------+-------+--------+-------------------------+-----------------+---------+----------------+------+--------------------------------------------------------+
  |  1 | PRIMARY            | odet  | range  | PRIMARY,idx_od_si_stime | idx_od_si_stime | 14      | NULL           |  183 | Using index condition; Using temporary; Using filesort |
  |  1 | PRIMARY            | oct   | ref    | idx_oct_odi             | idx_oct_odi     | 8       | sd_ets.odet.id |    1 | NULL                                                   |
  |  1 | PRIMARY            | ort   | eq_ref | PRIMARY                 | PRIMARY         | 8       | sd_ets.oct.id  |    1 | NULL                                                   |
  |  3 | DEPENDENT SUBQUERY | spkg  | eq_ref | PRIMARY                 | PRIMARY         | 8       | func           |    1 | NULL                                                   |
  |  2 | DEPENDENT SUBQUERY | suser | eq_ref | PRIMARY                 | PRIMARY         | 8       | func           |    1 | NULL                                                   |
  +----+--------------------+-------+--------+-------------------------+-----------------+---------+----------------+------+--------------------------------------------------------+
  5 rows in set (0.00 sec)
  我們看key已經(jīng)走了索引使用idx_od_si_stime
  查詢速度只要0.01毫秒。

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永吉县| 鹤峰县| 嘉禾县| 新竹县| 麻城市| 彰化县| 佳木斯市| 金昌市| 梁山县| 汨罗市| 正安县| 重庆市| 镇雄县| 涿鹿县| 元氏县| 福贡县| 兴海县| 临洮县| 敦煌市| 怀宁县| 西和县| 霍林郭勒市| 潢川县| 平罗县| 稷山县| 平遥县| 龙胜| 汉阴县| 如东县| 平和县| 寿阳县| 莫力| 丁青县| 河北省| 郴州市| 泸州市| 大庆市| 乐陵市| 琼中| 会同县| 鹤峰县|