MySQL多条件join优化

SELECTuser.nickname,visitors.week_likes
FROMuser
JOINvisitorsON(user.id=visitors.user_id)
WHERE(
user.role>=0
ANDvisitors.week_num=10
ANDvisitors.week_likes>0
AND(
user.show_index!=-1
ORuser.show_indexISNULL
)
)
ORDERBYvisitors.week_likesDESC,user.last_seenDESC
LIMIT100
user.id和visitors.id是主键,user.id与visitors.user_id对应。对visitors.user_id建立了索引,没什么效果,在SQL语句和索引方面能怎样优化?
由于week_num和week_likes的区分度很低(<0.001),所以我觉得建立索引没有太大的效果,但是,索引user_id换成(week_num,week_likes)后visitors的rows由9000+变为1700+了,至少行数来说还是很明显的(虽然查询时间上没有太大差别)
那先筛选user和visitor后再join会不会更好呢?
SELECTa.nickname,b.week_likes
FROM(SELECT*FROMuserWHERE(user.role>=0AND(user.show_index!=-1ORuser.show_indexISNULL))a
JOIN
(SELECTvisitors.user_id,visitors.week_likesFROMvisitorsWHERE(visitors.week_num=10ANDvisitors.week_likes>0))b
ON(a.id=b.user_id)
ORDERBYb.week_likesDESC,a.last_seenDESC
LIMIT100;
这句报错,不知道原因在哪?
还有其他什么方面可以优化的吗?
慕无忌1623718
浏览 331回答 2
2回答

蛊毒传说

explain呢?tabledesc呢?补充一下:通常数据量大,检索条件复杂,请求量也大的应用场景,考虑一下sphinx、elasticsearch的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript