亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個表里面的數據每天特別大 , 請問有什么好的優化辦法?

這個表里面的數據每天特別大 , 請問有什么好的優化辦法?

Cats萌萌 2023-04-16 17:13:05
表結構iMoney  類型:float   dtEventTime  類型:datetime   iType 類型:tinyint   iAction 類型:tinyint現在存在的索引(test)是:iType 跟 dtEventTime 的一個組合索引select sum(iMoney) as iMoney,iAction from CostMoney where iType = 3 and dtEventTime between '2012-09-29' and '2012-09-30' group by iAction這條語句查詢后explain 下id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra    1   SIMPLE  CostMoney   range   test    test    9   NULL    3893    Using where; Using temporary; Using filesort
查看完整描述

2 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

給你點建議:
1、按天分表,這樣每個表就不會那么大
2、用另一個緩存、或者表專門累加iMoney,每天的分記錄,產生一條累加一次
3、group by iAction order by NULL ?(天知道有沒有效果)

查看完整回答
反對 回復 2023-04-19
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

首先,dtEventTime必須要有索引的。而且dtEventTime類型應該是int,不應該使用date的。否則索引效率太低。
其次,分析這個sql的頻率高么?
如果只是幾次之類的話,而且數據要求不是實時的話,可以考慮循環取數據,程序里面做group和sum的功能。
如果很頻繁,數據要求實時,只能考慮單獨對每一個iAction建立單獨的計數器。
最后,sql應該盡量簡單,最理想的情況每次取數據都走索引。數據庫更多的是存數據,盡量減少每次sql的cup和io資源。數據庫的資源很寶貴,擴展成本比較高。

查看完整回答
反對 回復 2023-04-19
  • 2 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號