首頁>技術>

專案原因使用的是mysql5.7,目前無法改變,在專案中查詢語句裡使用了很多函式及其它多樣的條件,這對於分表分庫後,超過500W左右的資料查詢最佳化就是很關鍵了。

常規的索引最佳化並不能正常有效,因為使用的函式,在mysql8.0中,可以對函式進行索引,這樣查詢就可以走索引,但對於mysql5.7來說比較頭疼。

例如:

表結構如下

現在對日期查範圍需要合併在一起作為條件,如:

CONCAT(a.YEAR,a.MONTH) >= '202001' and CONCAT(a.YEAR,a.MONTH)< '202003'

這樣就無法走索引了。

可以如下執行建立虛擬列和建立虛擬列索引:

alter table cust_stat_mloadcharact add ym varchar(10) generated always as (concat(year,month));alter table cust_stat_mloadcharact add index idx_ym(ym);

最佳化後:

select * from A where ym >= '202001' and ym< '202003'

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 這是你的童年記憶嗎?用python,帶你找回童年記憶