鍍金池/ 問答/PHP  數(shù)據(jù)庫/ mysql大數(shù)據(jù)量的統(tǒng)計,太耗時,php超時了

mysql大數(shù)據(jù)量的統(tǒng)計,太耗時,php超時了

請問,我想做個數(shù)據(jù)統(tǒng)計的功能,
我先在order表取出order_id,再去order_detail表in(order_id)取出數(shù)據(jù)
然后在php中,做統(tǒng)計!
現(xiàn)在業(yè)務(wù)量激增,致使查詢一個月的信息統(tǒng)計,就超時了!請問有什么好的優(yōu)化辦法嗎?請指教一下!

回答
編輯回答
拼未來

分開來一次不要查全部的 比如說你有100W條數(shù)據(jù) 做統(tǒng)計他也不可能一次看100W條你可以以分頁的形式統(tǒng)計或者默認(rèn)條件統(tǒng)計,這樣就不會超時啦

2018年7月4日 07:26
編輯回答
檸檬藍(lán)

在大數(shù)據(jù)和聯(lián)合查詢方面,mysql 做的并不好

方法一:

  1. 保證order_id字段都做了索引
  2. 然后通過php控制一條條用 select * from order_detail where order_id = ? 做查詢。但要求內(nèi)存夠大

方法二:
1 order和order_detail的數(shù)據(jù)換到hbase里,做數(shù)據(jù)統(tǒng)計和時序數(shù)據(jù),這是它的強(qiáng)項

2018年2月5日 05:25
編輯回答
脾氣硬

給你個思路:1.比如12W數(shù)據(jù);分4次查詢;每次得到一個結(jié)果,緩存到redis;求出結(jié)果,把這個結(jié)果值和此次統(tǒng)計的最后一個orderid值(如果自增)寫入一個key;結(jié)合crotab每天凌晨統(tǒng)計一次,并更新進(jìn)redis中;真正執(zhí)行http請求過來獲取統(tǒng)計結(jié)果的時候;取出統(tǒng)計的結(jié)果 + 之前存下的orderid后面的新數(shù)據(jù)即可得到數(shù)據(jù);可供參考

2017年6月14日 09:33