1.場(chǎng)景一
騰訊調(diào)用我方接口進(jìn)行url封禁和查詢肥印,并發(fā)要求50qps性锭,測(cè)試同學(xué)使用jmeter壓測(cè)時(shí)發(fā)現(xiàn)孵班,查詢封禁信息接口涉兽,構(gòu)造20個(gè)并發(fā)后,發(fā)現(xiàn)查詢響應(yīng)變慢(>2000ms),導(dǎo)致再高的并發(fā)壓不上去不滿足客戶需求篙程。
2. 問題分析
通過查詢?nèi)罩炯衔罚ㄎ坏皆摋lsql語句耗時(shí)較長(zhǎng),通過explain分析該sql語句的執(zhí)行計(jì)劃:
explain select * from forbidden_info where guid ='5af50517-f11a-4370-9ca6-03aa61d39b37'
未優(yōu)化前執(zhí)行計(jì)劃.png
下面來分析執(zhí)行計(jì)劃:
執(zhí)行項(xiàng) | 具體值 | 描述 |
---|---|---|
select_type | SIMPLE | 是一個(gè)簡(jiǎn)單查詢沒有關(guān)聯(lián)或者子查詢 |
table | forbidden_info | 表名 |
type | ALL | 全表掃描 |
extra | using where | 未找到索引使用where條件過濾 |
通過以上執(zhí)行計(jì)劃分析發(fā)現(xiàn)該查詢沒有使用到索引,導(dǎo)致查詢效率低虱饿。給guid添加索引后:alter table forbidden_info add index index_guid
(guid); 查看執(zhí)行計(jì)劃
添加索引后的執(zhí)行計(jì)劃.png
執(zhí)行項(xiàng) | 具體值 | 描述 |
---|---|---|
select_type | SIMPLE | 是一個(gè)簡(jiǎn)單查詢沒有關(guān)聯(lián)或者子查詢 |
table | forbidden_info | 表名 |
type | ref | 命中了非主鍵索引 |
possible_keys | index_guid | 可能使用到的索引 |
key | index_guid | 實(shí)際使用到的索引 |
key_length | 603 | 表示索引使用的字節(jié)數(shù) |
ref | const | 表示索引使用的字節(jié)數(shù) |
rows | 10 | 數(shù)據(jù)庫認(rèn)為需要檢查的行數(shù)拥诡,估算值,非結(jié)果行數(shù) |
extra | using index condition | 使用了ICP索引下推技術(shù) |
添加索引后氮发,查詢耗時(shí)基本在毫秒級(jí)渴肉,整個(gè)接口的響應(yīng)從2000ms下降到200ms左右