鍍金池/ 問答/數(shù)據(jù)庫/ mysql分組后分頁問題

mysql分組后分頁問題

需求:統(tǒng)計用戶訂單數(shù)量

sql_1:

SELECT user_id, count(id) FROM t_order GROUP BY user_id LIMIT 0,50

sql_2

SELECT * FROM (SELECT user_id, count(id) FROM t_order GROUP BY user_id) t1 LIMIT 0,50

問題,當

SELECT user_id, count(id) FROM t_order GROUP BY user_id

結果集1000+以上或者幾百吧,進行分頁,sql_1執(zhí)行非常慢,而是用sql_2寫法就快很多,求解答

回答
編輯回答
情皺

sql1的 LIMIT 是全表掃描
sql2似乎是把結果存到緩存里, 再掃描.

我遇到過limit大表慢的情況, 但不用分組, 開始用的id查, 后來改游標了.

2018年3月9日 12:58
編輯回答
離觴

我的試驗結果與你的不一樣,如果你沒有多次反復運行的話, 很可能緩存造成的假象誤導了你

試試用下面的兩組 SQL 重新做一下測試

SELECT user_id, count(id),now() FROM t_order GROUP BY user_id LIMIT 0,50
SELECT t1.*,now() FROM (SELECT user_id, count(id) FROM t_order GROUP BY user_id) t1 LIMIT 0,50
SELECT t1.* FROM (SELECT user_id, count(id),now() FROM t_order GROUP BY user_id) t1 LIMIT 0,50


SELECT user_id, count(id),now() FROM t_order GROUP BY user_id LIMIT 1,51
SELECT t1.*,now() FROM (SELECT user_id, count(id) FROM t_order GROUP BY user_id) t1 LIMIT 1,51
SELECT t1.* FROM (SELECT user_id, count(id),now() FROM t_order GROUP BY user_id) t1 LIMIT 1,51
2018年4月23日 07:36