慢IN()MySQL查询优化

安东尼

我有以下SQL查询,该查询效果很好,但处理速度很慢(3到5秒)。我已经在“ slug”和“ checksum”列上创建了索引,但是由于IN子句遍历了5000至10000行,因此不够快。我读到有一种方法可以使用临时表和/或联接对其进行改进,但是我找不到一种使它起作用的方法。

数据库引擎是MySQL上的InnoDB。任何帮助将非常感激。

SELECT name AS personName, 
       slug AS personSlug, 
       COUNT(slug) AS personCount 
  FROM person
 WHERE checksum IN
         ( SELECT checksum 
             FROM person 
            WHERE slug = 'john-doe' )  
   AND NOT (slug = 'john-doe')
 GROUP BY personName 
 ORDER BY personCount DESC
迈克·布兰特

我没有完全理解您的查询正在尝试执行的操作而没有看到一些示例数据。但是,似乎您正在尝试查找与与“ john-doe”相关联的校验和匹配的所有校验和,但没有slug =“ john-doe”-因此搜索某种重复项。

以下自我加入应该为您做到这一点。

SELECT
    p.name AS personName,
    p.slug AS personSlug,
    COUNT(p.slug) AS personCount
FROM
    person AS p
INNER JOIN
    person AS p2
ON
    p.checksum = p2.checksum
WHERE
    p2.slug = 'john-doe'
    AND p.slug <> 'john-doe'
GROUP BY personName
ORDER BY personCount DESC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章