mysql8优化实战
最近上線了一個(gè)10萬(wàn)戶的管理系統(tǒng),以前的客戶沒(méi)有這么多用戶量,隱藏在代碼中的慢sql漸漸顯現(xiàn)出來(lái)了。
下面是我最近一周慢sql優(yōu)化的總結(jié):
一、多表sql優(yōu)化
二、count sql優(yōu)化
該表有2135067條記錄,使用pageHelper默認(rèn)生成的count sql,導(dǎo)致相關(guān)菜單頁(yè)面完全沒(méi)法使用
由于count(*)太慢,考慮到使用count(任意索引列)的方式寫(xiě)sql,字段的數(shù)據(jù)長(zhǎng)度越長(zhǎng),建立的索引長(zhǎng)度越長(zhǎng)、查詢性能越差。就找了長(zhǎng)度只有1的status字段,這樣能達(dá)到最好的索引性能。
使用如下sql建立索引:
從阿里規(guī)約得知,count(列名)不會(huì)統(tǒng)計(jì)此列為NULL值的行,status字段必須設(shè)置成非空,否則存在NULL值會(huì)導(dǎo)致統(tǒng)計(jì)數(shù)據(jù)錯(cuò)誤;雖然該優(yōu)化不符合規(guī)約,但實(shí)實(shí)在在的提升性能,故值得一試!
三、超過(guò)10 0000條limit優(yōu)化
MySQL 并不是跳過(guò) offset 行,而是取 offset+N 行,然后返回放棄前 offset 行,返回 N 行,那當(dāng) offset 特別大的時(shí)候,效率就非常的低下,要么控制返回的總頁(yè)數(shù),要么對(duì)超過(guò)特定閾值的頁(yè)數(shù)進(jìn)行 SQL 改寫(xiě)。
數(shù)值狀態(tài)碼查詢條件,使用int代替varchar查詢效率更高 status:char(1)
總結(jié)
以上是生活随笔為你收集整理的mysql8优化实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自定义能够for each的类,C#,J
- 下一篇: Delphi:ADOConnection