記一次sql優(yōu)化實(shí)踐

當(dāng)業(yè)務(wù)數(shù)據(jù)量較大時(shí)猿推,有時(shí)sql查詢會(huì)變慢秘症,影響數(shù)據(jù)的展示和用戶體驗(yàn)素挽,所以我們在編寫sql時(shí)要盡量考慮到數(shù)據(jù)量較大的場景蔑赘,以免影響后續(xù)的使用,但有的時(shí)候計(jì)劃趕不上變化预明,這個(gè)時(shí)候我們不得不進(jìn)行sql語句優(yōu)化

原始sql:

SELECT
    b.store_id AS `storeId` ,
    b.goods_id AS `goodsId` ,
    b.goods_info_id AS `goodsInfoId` ,
    b.sale_price AS `salePrice`
FROM
    brand_store_goods b
LEFT JOIN goods g ON b.goods_id = g.goods_id
WHERE
    b.del_flag = 0
AND g.del_flag = 0
AND g.audit_status = 1
AND(g.added_flag = 1 OR g.added_flag = 2)
AND b.supplier_added_flag = 1
GROUP BY b.store_id , b.goods_id
limit 0,10

explain分析sql

當(dāng)發(fā)現(xiàn)一條sql的查詢耗時(shí)較多時(shí)缩赛,首先我們要判斷sql語句的執(zhí)行效率,explain后發(fā)現(xiàn)都是全表掃描撰糠,還沒有索引酥馍。因?yàn)殡m然分頁,但使用了group by關(guān)鍵詞阅酪,mysql還是會(huì)進(jìn)行全表掃描


explain結(jié)果

查詢耗時(shí)

建立索引

首先我們在group by的字段上添加上索引旨袒,然而發(fā)現(xiàn)速度并沒有什么變化,這個(gè)時(shí)候我們看sql是先left join再group by的术辐,那是不是和sql的執(zhí)行順序有關(guān)呢

sql執(zhí)行順序
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE or WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP

這里得知砚尽,Mysql 是先執(zhí)行關(guān)聯(lián)表然后再進(jìn)行條件查詢的最后再分組,那么想想這SQL的條件查詢和分組都只是一個(gè)表的,關(guān)聯(lián)后數(shù)據(jù)就變得多了辉词,這時(shí)候再進(jìn)行條件查詢和分組是不是有點(diǎn)沒必要必孤,我們可以嘗試一下提前進(jìn)行分組和條件查詢,實(shí)現(xiàn)方法就是子查詢聯(lián)合關(guān)聯(lián)查詢

 SELECT
    A.store_id ,
    A.goods_id ,
    A.sale_price
FROM
    (
        SELECT
            store_id ,
            goods_id ,
            sale_price
        FROM
            brand_store_goods
        WHERE
            del_flag = 0
        AND supplier_added_flag = 1
        GROUP BY
            store_id ,
            goods_id
    ) A
LEFT JOIN goods g ON 
A.goods_id = g.goods_id AND g.del_flag = 0
AND g.audit_status = 1
AND(g.added_flag = 1 OR g.added_flag = 2)
LIMIT 0,10

explain再來看下


explain結(jié)果

查詢耗時(shí)

看起來是優(yōu)化了不少较屿,但是其實(shí)數(shù)據(jù)量目前還沒有很大隧魄,是不是可以繼續(xù)從其他地方下手優(yōu)化呢卓练,比如left join,left join優(yōu)化比較重要的兩點(diǎn)是:1购啄、小表驅(qū)動(dòng)大表 2襟企、右表的條件列一定要加上索引(主鍵、唯一索引狮含、前綴索引等)顽悼,最好能夠使type達(dá)到range及以上(ref,eq_ref,const,system)
現(xiàn)在我們在原始sql的基礎(chǔ)上,對右表(brand_store_goods)條件列g(shù)oods_id上加上索引


explain結(jié)果

看到這波分析心里踏實(shí)了一些几迄,看下耗時(shí)
查詢耗時(shí)

這個(gè)速度基本比較滿意了蔚龙,不過像剛才說的,目前的數(shù)據(jù)量其實(shí)還沒有達(dá)到幾十萬甚至百萬級映胁,后續(xù)肯定還需要進(jìn)一步優(yōu)化木羹,不過我認(rèn)為其實(shí)一開始完全可以在數(shù)據(jù)庫表設(shè)計(jì)層面規(guī)避掉group by的使用,拆成兩張表去存儲解孙,不過這也是后話了

未完待續(xù)···

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坑填,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弛姜,更是在濱河造成了極大的恐慌脐瑰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廷臼,死亡現(xiàn)場離奇詭異苍在,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荠商,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門寂恬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人结啼,你說我怎么就攤上這事掠剑。” “怎么了郊愧?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵朴译,是天一觀的道長。 經(jīng)常有香客問我属铁,道長眠寿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任焦蘑,我火速辦了婚禮盯拱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己狡逢,他們只是感情好宁舰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奢浑,像睡著了一般蛮艰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雀彼,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天壤蚜,我揣著相機(jī)與錄音,去河邊找鬼徊哑。 笑死袜刷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莺丑。 我是一名探鬼主播著蟹,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼窒盐!你這毒婦竟也來了草则?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蟹漓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后源内,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年玷室,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醋拧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颂斜,死狀恐怖夫壁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沃疮,我是刑警寧澤盒让,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站司蔬,受9級特大地震影響邑茄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俊啼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一肺缕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦同木、人聲如沸浮梢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黔寇。三九已至,卻和暖如春斩萌,著一層夾襖步出監(jiān)牢的瞬間缝裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工颊郎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憋飞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓姆吭,卻偏偏與公主長得像榛做,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子内狸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容