千万级表和小表的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。
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回答
-
可以试试先在子查询中把需要的大表数据过滤出来,然后再和小表关联的方式。142018-07-06
相似问题