我对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。
感谢您的时间。
答案 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);
这肯定会提高查询的性能......
希望这有助于......:)