请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

千万级表和小表的JOIN + ORDER BY 如何优化?

SELECT

`v_yy_yb021_ext`.typeid,

`v_yy_yb021_ext`.title,

`v_yy_yb021_ext`.orgid AS jgid,

`v_yy_yb021_ext`.orgname AS jgmc,

`v_yy_yb021_ext`.humanname AS author,

`v_yy_yb021_ext`.ctime AS time,

`v_yy_yb021_ext`.seq AS id,

`v_yy_yb021_ext`.typename AS type

FROM `human_famous`

LEFT JOIN `v_yy_yb021_ext`

ON `human_famous`.`hycode` = `v_yy_yb021_ext`.`hycode`

AND `human_famous`.`humanid` = `v_yy_yb021_ext`.`humanid`


WHERE `v_yy_yb021_ext`.`isvalid` = 1

AND `v_yy_yb021_ext`.`declaredate` >= '2016-10-06'

ORDER BY `ctime` DESC

LIMIT 0,10;

去掉排序,需要执行5s,排序的话需要60s。

EXPLAIN输出如下:

1
2
1   SIMPLE  human_famous        index   PRIMARY PRIMARY                                                132                               2701    100 Using index; Using temporary; Using filesort
1   SIMPLE  v_yy_yb021_ext      ref hycode,declaredate,humanid,hycode_humanid,humanid_ctime hycode  67  vis_db.human_famous.hycode  2   2.5 Using where


正在回答

插入代码

1回答

可以试试先在子查询中把需要的大表数据过滤出来,然后再和小表关联的方式。
1 回复 有任何疑惑可以回复我~
  • 提问者 慕慕7652243 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-07-06 19:56:13
  • 提问者 慕慕7652243 #2
    子查询中已经过滤出来只剩下1000-2000条数据了。 子查询1000条数据查询很快,在1秒之内。 但是1600条速度就直接下降到数十秒。。
    回复 有任何疑惑可以回复我~ 2018-07-06 20:03:25
  • sqlercn 回复 提问者 慕慕7652243 #3
    你把limit也加到子查询中试一下
    回复 有任何疑惑可以回复我~ 2018-07-06 20:05:38
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号