Mysql SQL查询非常慢
我有这个模式,这将坐在一个爬虫的后面<代码>mitza.mine.nu 我不擅长SQL,并且我遇到了接近的结果。但问题是 快到尽头了。因为2个单词几乎需要一分钟,而Mysql SQL查询非常慢,mysql,search,many-to-many,query-optimization,Mysql,Search,Many To Many,Query Optimization,我有这个模式,这将坐在一个爬虫的后面mitza.mine.nu 我不擅长SQL,并且我遇到了接近的结果。但问题是 快到尽头了。因为2个单词几乎需要一分钟,而3个单词永远需要 在4555条记录上。(当前生命样本运行另一个查询) que做到了这一点: 搜索w1 w2中的单词点击DICT并获取单词id。这是在一个单独的系统中完成的 询问 从word id(271和8596,例如)选择所有记录并按排序 (所有记录都包含按权重和排序的两个单词),然后是按权重排序的单词1和单词2 SELECT DISTIN
3个单词永远需要
在4555条记录上
。(当前生命样本运行另一个查询)
que做到了这一点:
w1 w2
中的单词点击DICT并获取单词id。这是在一个单独的系统中完成的
询问271和8596,例如
)选择所有记录并按排序(所有记录都包含按权重和排序的两个单词),然后是按权重排序的单词1和单词2
SELECT DISTINCT(links.linkid),domain.ip,links.linkid,
links.url,words.weight,words.wordid
FROM links
JOIN words ON (words.linkid=links.linkid)
JOIN domain ON (domain.siteid=links.siteid)
WHERE links.linkid IN (SELECT linkid FROM words WHERE wordid=271)
AND links.linkid IN (SELECT linkid FROM words WHERE wordid=8596)
ORDER BY words.weight DESC LIMIT 0, 8
尝试以下查询,避免重复调用链接表
SELECT DISTINCT(links.linkid),domain.ip,links.linkid,
links.url,words.weight,words.wordid
FROM links
JOIN words ON (words.linkid=links.linkid)
JOIN domain ON (domain.siteid=links.siteid)
WHERE (words.wordid=271 or words.wordid=8596)
ORDER BY words.weight DESC LIMIT 0, 8
并确保主键上有索引。不要使用内部查询。还应避免在where子句中使用OR,因为它不使用索引。对wordid、linkid和siteid建立索引,然后尝试以下查询:
SELECT DISTINCT(links.linkid),domain.ip,links.linkid,
links.url,words.weight,words.wordid
FROM links
JOIN words ON (words.linkid=links.linkid)
JOIN domain ON (domain.siteid=links.siteid)
WHERE words.wordid IN (271,8596)
ORDER BY words.weight DESC LIMIT 0, 8
试试这个:
SELECT DISTINCT(links.linkid),domain.ip,links.linkid,
links.url,words.weight,words.wordid
FROM links
JOIN
(SELECT linkid,weight,wordid FROM words WHERE wordid IN (271,8596)) words
ON (words.linkid=links.linkid)
JOIN domain
ON (domain.siteid=links.siteid)
ORDER BY words.weight DESC LIMIT 0, 8;
可能重复的