【问题标题】:Mysql SQL query very slowmysql SQL查询很慢
【发布时间】:2014-03-21 04:35:43
【问题描述】:

我有这个架构,它会坐在爬虫的后面。 mitza.mine.nu 我不擅长 SQL,结果很接近。但查询 运行时间很长。对于 2 个单词,几乎需要一分钟,for3 forever on 4555 records。 (当前生活样本运行另一个查询)

阙会这样做:

  1. 来自搜索 w1 w2 的单词命中 DICT 并获取单词 id。这是在单独的 查询。

  2. 从单词 id (271 and 8596 for example) 中选择所有记录并按以下顺序排序
    (所有记录都包含按权重排序的两个单词),然后是单词 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
    

【问题讨论】:

标签: mysql search many-to-many query-optimization


【解决方案1】:

尝试以下查询,避免重复调用链接表。

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

并确保您的主键上有索引。

【讨论】:

    【解决方案2】:

    不要使用内部查询。还要避免在 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
    

    【讨论】:

      【解决方案3】:

      试试这个:

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        • 2014-09-17
        相关资源
        最近更新 更多