如何重写慢WHERE IN查询

时间:2014-01-01 04:31:04

标签: mysql

我对mysql不是很熟悉,并且想知道如何重写以下查询来修复它并加快速度。我相信我必须使用JOIN(或其他东西),但我不知道该怎么做。

我想要实现的是执行简单的MATCH AGAINST查询,并使用这些结果中的ID(在表2中),检索table1中具有相同ID的所有相应行。

SELECT *
FROM table1
WHERE id IN (
    SELECT id
    FROM table2
    WHERE MATCH (gloss) AGAINST ('example' IN BOOLEAN MODE)
    LIMIT 10
)

请注意,我知道上面的子查询不适用于LIMIT。

感谢您的时间。

2 个答案:

答案 0 :(得分:2)

尝试一个简单的内连接

SELECT *
FROM table1
INNER JOIN table2
USING(id)
WHERE MATCH (gloss) AGAINST ('example' IN BOOLEAN MODE)
LIMIT 10

要使用LIMIT运行IN,您必须将其包含在另一个查询中,如此

SELECT *
FROM table1
WHERE id IN (SELECT id FROM
                 (SELECT id
                  FROM table2
                  WHERE MATCH (gloss) AGAINST ('example' IN BOOLEAN MODE)
                  LIMIT 10
                 )T1
            )

使用INNER JOIN获得与使用LIMIT 10的IN完全相同的结果,你可以这样做

SELECT *
FROM table1
INNER JOIN
 (SELECT id
  FROM table2
  WHERE MATCH (gloss) AGAINST ('example' IN BOOLEAN MODE)
  LIMIT 10
 )T1
USING (id)

答案 1 :(得分:0)

尝试在表格的id列添加索引

ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);

这肯定会提高查​​询的性能......

希望这有助于......:)