国产探花免费观看_亚洲丰满少妇自慰呻吟_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 的這個值有多少數據,來進一步驗證我們的猜想。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临沭县| 兴安盟| 正镶白旗| 绍兴市| 博乐市| 建始县| 庆安县| 鸡泽县| 调兵山市| 淮滨县| 大安市| 平定县| 广德县| 台山市| 县级市| 万宁市| 聊城市| 庆元县| 股票| 南丹县| 庐江县| 布尔津县| 枣阳市| 湾仔区| 临颍县| 涟水县| 株洲市| 那曲县| 南丰县| 万盛区| 罗山县| 郯城县| 湛江市| 繁昌县| 浮山县| 洛南县| 平原县| 嘉黎县| 任丘市| 万州区| 山东省|