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

首頁 > 數據庫 > MySQL > 正文

MySQL的一條慢SQL查詢導致整個網站宕機的解決方法

2024-07-24 12:53:57
字體:
來源:轉載
供稿:網友

直接切入正題吧:

通常來說,我們看到的慢查詢一般還不致于導致掛站,頂多就是應用響應變慢
不過這個恰好今天被我撞見了,一個慢查詢把整個網站搞掛了
先看看這個SQL張撒樣子:

# Query_time: 70.472013 Lock_time: 0.000078 Rows_sent: 7915203 Rows_examined: 15984089 Rows_affected: 0
# Bytes_sent: 1258414478
use js_sku;
SET timestamp=1465850117;
SELECT 
ss_id, ss_sa_id, ss_si_id, ss_av_zid, ss_av_fid, ss_artno,
ss_av_zvalue, ss_av_fvalue, ss_av_zpic, ss_av_fpic, ss_number,
ss_sales, ss_cprice, ss_price, ss_stock, ss_orderid, ss_status,
ss_add_time, ss_lastmodify
FROM js_sgoods_sku
WHERE ss_si_id = 0 AND ss_status > 0
ORDER BY
ss_orderid DESC, ss_av_fid ASC;
這里貼出來的就是 mysql slow log 的信息,查詢時間用了高達 70s!!
看到慢查詢我們一般第一反應是這個 語句沒有用到索引? 或者是索引不合理么? 那我們會去看看執行計劃:

mysql> explain SELECT 
-> ss_id, ss_sa_id, ss_si_id, ss_av_zid, ss_av_fid, ss_artno,
-> ss_av_zvalue, ss_av_fvalue, ss_av_zpic, ss_av_fpic, ss_number,
-> ss_sales, ss_cprice, ss_price, ss_stock, ss_orderid, ss_status,
-> ss_add_time, ss_lastmodify
-> FROM js_sgoods_sku
-> WHERE ss_si_id = 0 AND ss_status > 0
-> ORDER BY
-> ss_orderid DESC, ss_av_fid ASC;
+----+-------------+---------------+------+---------------+----------+---------+-------+---------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+----------+---------+-------+---------+-----------------------------+
| 1 | SIMPLE | js_sgoods_sku | ref | ss_si_id | ss_si_id | 4 | const | 9516091 | Using where; Using filesort |
+----+-------------+---------------+------+---------------+----------+---------+-------+---------+-----------------------------+
1 row in set (0.00 sec)

這個看起來似乎用到了索引,可是為什么掃描到行還是這么多呢? 那我們就去看看表結構了,期望能從中找到點有價值的東西:
我們看到如下可用信息:
KEY `ss_si_id` (`ss_si_id`,`ss_av_zid`,`ss_av_fid`) USING BTREE,
`ss_si_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '對應js_sgoods_info.si_id',

我們看到 索引似乎還能比較能夠接受,但是我們看到 這個 ss_si_id 這個字段實際上是 goods_info 表的主鍵,也就是說它的離散程度應該是很大的,也就是區分度很大。
其實到這一步我們基本上可以認為 是由于我們這個表里邊有很多 ss_si_id=0 導致,不過我們可以進一步的來證實我們的猜想:

1. 首先我們可以先確定我們的統計信息沒有問題
2. 其次我們再count ss_si_id=0 的這個值有多少數據,來進一步驗證我們的猜想。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永和县| 赣榆县| 通化市| 水富县| 浏阳市| 缙云县| 北海市| 无锡市| 深圳市| 蒙山县| 顺昌县| 乌苏市| 乐都县| 宿迁市| 朝阳市| 天津市| 安仁县| 樟树市| 文安县| 资源县| 黎川县| 潜江市| 葵青区| 乐昌市| 大荔县| 邮箱| 文化| 南江县| 博爱县| 宜州市| 铜陵市| 天台县| 娄烦县| 格尔木市| 阿合奇县| 新丰县| 镇远县| 镶黄旗| 林西县| 银川市| 四会市|