mysql左连接执行时间过长
我已经找到了一些例子,但仍然无法快速完成 歌曲表:mysql左连接执行时间过长,mysql,left-join,Mysql,Left Join,我已经找到了一些例子,但仍然无法快速完成 歌曲表: song_id song_name vote_id song_id vote_ip favorite_id song_id favorite_owner SELECT * FROM songs as s LEFT JOIN votes as v ON v.song_id = s.song_id AND v.vote_ip='78.63.35.138' LEFT JOIN favorites as f ON f.song_id = s
song_id
song_name
vote_id
song_id
vote_ip
favorite_id
song_id
favorite_owner
SELECT * FROM songs as s
LEFT JOIN votes as v ON v.song_id = s.song_id
AND v.vote_ip='78.63.35.138'
LEFT JOIN favorites as f ON f.song_id = s.song_id
AND (f.favorite_owner='78.63.35.138'
OR f.favorite_owner='1') WHERE s.song_id!=''
LIMIT 100 OFFSET 1
;
投票表:
song_id
song_name
vote_id
song_id
vote_ip
favorite_id
song_id
favorite_owner
SELECT * FROM songs as s
LEFT JOIN votes as v ON v.song_id = s.song_id
AND v.vote_ip='78.63.35.138'
LEFT JOIN favorites as f ON f.song_id = s.song_id
AND (f.favorite_owner='78.63.35.138'
OR f.favorite_owner='1') WHERE s.song_id!=''
LIMIT 100 OFFSET 1
;
收藏夹表:
song_id
song_name
vote_id
song_id
vote_ip
favorite_id
song_id
favorite_owner
SELECT * FROM songs as s
LEFT JOIN votes as v ON v.song_id = s.song_id
AND v.vote_ip='78.63.35.138'
LEFT JOIN favorites as f ON f.song_id = s.song_id
AND (f.favorite_owner='78.63.35.138'
OR f.favorite_owner='1') WHERE s.song_id!=''
LIMIT 100 OFFSET 1
;
我的查询:
song_id
song_name
vote_id
song_id
vote_ip
favorite_id
song_id
favorite_owner
SELECT * FROM songs as s
LEFT JOIN votes as v ON v.song_id = s.song_id
AND v.vote_ip='78.63.35.138'
LEFT JOIN favorites as f ON f.song_id = s.song_id
AND (f.favorite_owner='78.63.35.138'
OR f.favorite_owner='1') WHERE s.song_id!=''
LIMIT 100 OFFSET 1
;
我得到了结果,但查询执行时间是12秒。显示所有表的CREATETABLE语句,以及EXPLAIN SELECT的结果。。。在你的问题上,表上有什么索引?您是否尝试过使用MySQL的
explain
函数来查看它在做什么?正在加载多少数据?在任何人都能回答这个问题之前,您需要告诉我们更多关于这一切的信息。首先,您需要加入三个表-这取决于数据库的大小,这肯定需要时间。第二,s.song\u id!=''代码>真的吗?你有多少首没有身份证的歌?!结构:解释:也许我不是?也许有更简单的方法吗?我只想按song_id融合3张桌子