Mysql 内部连接 + 匹配:如何加速



我想知道如何加快下面的查询速度。 我正在使用不同的内部连接来检索属于不同节点类别的内容。 显然,txt_for_search上有一个全文索引。

SELECT DISTINCT(c.id_content)) as tot, c.* FROM Contents c 
INNER JOIN (SELECT id_content FROM Content_Nodes 
WHERE id_node IN (139)) cn1 ON c.id_content=cn1.id_content 
INNER JOIN (SELECT id_content FROM Content_Nodes 
WHERE id_node IN (6)) cn2 ON c.id_content=cn2.id_content 
INNER JOIN (SELECT id_content FROM Content_Nodes 
WHERE id_node IN (389,399)) cn3 ON c.id_content=cn3.id_content  
WHERE MATCH(txt_for_search) AGAINST ('my query'  IN BOOLEAN MODE)  and  DATEDIFF(NOW(),to_date)<=365  and enabled=1

如果我做这个查询是超快的

SELECT DISTINCT(c.id_content)) as tot, c.* FROM Contents c  
WHERE MATCH(txt_for_search) AGAINST ('my query'  IN BOOLEAN MODE)  and  DATEDIFF(NOW(),to_date)<=365  and enabled=1

即使是与内部连接相关的 SELECT 也非常快。

我必须一起等待 100 多秒...

我尝试连接分解,它有效。 我还按照此处的建议更改了带有find_in设置的"选择"。

我不知道这是不是最好的。 我希望内部联接将所有内容包含在一个查询中,但我找不到不同的解决方案。

最新更新