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

来源:7-7 特定SQL的查询优化

慕慕7652243

2018-07-06

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


写回答

1回答

sqlercn

2018-07-06

可以试试先在子查询中把需要的大表数据过滤出来,然后再和小表关联的方式。
0
1
慕慕7652243
子查询中已经过滤出来只剩下1000-2000条数据了。 子查询1000条数据查询很快,在1秒之内。 但是1600条速度就直接下降到数十秒。。
2018-07-06
共1条回复

MySQL提升课程 全面讲解MySQL架构设计

面面俱到讲解影响MySQL性能的各个因素,让MySQL架构了然于胸。

4419 学习 · 547 问题

查看课程