请稍等 ...
×

采纳答案成功!

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

一张百万级的表 和 一张小表的 JOIN 查询,加上 ORDER BY 该如何优化?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
您的移动学习伙伴

公众号

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