數(shù)據(jù)庫目前有100萬數(shù)據(jù)(運行了半個月左右)下面這句運行要6秒(單單where的結(jié)果有100萬),user_id和time都加索引了SELECT user_id,count(*) as count from prize_numbers where user_id > 0 and time > 1545972485 GROUP BYuser_id ORDER BY count desc下面這句也是一樣的,要6秒SELECT user_id,count(*) as count from ( SELECT user_id from prize_numbers where user_id > 0 and time > 1545972485)t GROUP BY user_id ORDER BY count desc該怎么優(yōu)化 ?這是表結(jié)構(gòu)
2 回答

慕田峪9158850
TA貢獻1794條經(jīng)驗 獲得超7個贊
找到問題所在了,又學(xué)到一個新知識。
SELECT user_id,count(*) as count from prize_numbers where user_id > 0 and time > 1545972485 GROUP BYuser_id ORDER BY count desc
如題,查詢要6秒,user_id,time都設(shè)置了索引。
多次嘗試后發(fā)現(xiàn)以下2句查詢速度非常快,在1秒以內(nèi)。
SELECT user_id,count(*) as count from prize_numbers where time > 1545972485 GROUP BY user_id ORDER BYcount desc
SELECT user_id,count(*) as count from prize_numbers where user_id > 0 GROUP BY user_id ORDER BY countdesc
搜了好些資料,看到了一個叫聚合索引的東西,嘗試了下,速度一下子就快了。語句如下:
alter table 表名 add index 索引名 (加索引的列1,加索引的列2)
例如我的:
alter table prize_numbers add index union_user_id_time (user_id, time)
聚合索引要加哪些字段,我粗暴的理解為把where語句后面的條件字段都加到一個聚合索引中。

動漫人物
TA貢獻1815條經(jīng)驗 獲得超10個贊
SELECT user_id,count(id) as count from prize_numbers where user_id > 0 and time > 1545972485 GROUP BYuser_id ORDER BY count desc
- 2 回答
- 1 關(guān)注
- 6097 瀏覽
添加回答
舉報
0/150
提交
取消