请稍等 ...
×

采纳答案成功!

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

一张百万级的表 和 一张小表的 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的时间。
where和orderby的字段都有索引。
EXPLAIN 输出如下:
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


正在回答 回答被采纳积分+3

1回答

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

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

帮助反馈 APP下载

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

公众号

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