專案原因使用的是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'
最新評論