0

我正在尝试创建一个 SELECT 查询,该查询通过特定的关键字组合 3 个表LEFT JOIN,然后生成结果表。MATCHAGAINST

到目前为止,我的测试表明查询工作正常并且输出结果正确,但是我对通过LEFT JOIN.

问题是 - 我应该添加额外的代码来反映FULLTEXT索引要求,还是只正确索引原始表中的相关列就足够了?MATCH AGAINSTLEFT JOIN

问的原因是这个帖子。如果我理解它是正确的,我的代码不应该工作(因为“你不能定义全文索引......在 MySQL 中的多个表”)。因此MATCH AGAINSTforma.name_urlv.model, 因为它们没有被索引(或者这是我的理解方式,如果我错了,请纠正我:))。

但是,由于查询输出似乎是正确的,如果以下代码正确,或者我应该添加/修改某些内容,我需要专家建议:

SELECT v.*, vt.color, ma.* 
          FROM tbl_items AS v 
     LEFT JOIN tbl_options
            AS vt on v.id = vt.v_id 
     LEFT JOIN tbl_names
            AS ma on v.make = ma.id 
         WHERE 
               ( 
                      ( 
                  MATCH (ma.name_url) AGAINST ('keyword1' IN BOOLEAN MODE) 
               OR MATCH (v.model) AGAINST ('keyword1' IN BOOLEAN MODE) 
                      ) 
           AND 
                      ( 
                  MATCH (ma.name_url) AGAINST ('keyword2' IN BOOLEAN MODE) 
               OR MATCH (v.model) AGAINST ('keyword2' IN BOOLEAN MODE) 
                      ) 
               ) 
           AND v.type = 4
4

1 回答 1

0

我认为你误读了这篇文章。单个全文索引仅引用一个表。实际上,所有其他索引都是如此,所以我不确定为什么会出现混淆。索引可以引用表中的多个列,但只能引用一张表。

至于您的查询,我不确定哪个更重要——全文索引或常规索引。

在编写查询时,您将返回与条件ma不匹配的行match。也许这很好,但看起来很可疑。

而且,如果性能是一个问题,您可能会发现将查询分成单独的子查询(由UNIONor连接UNION ALL)可以获得更好的性能。可以更有效地优化每个子查询。

于 2015-09-26T12:30:34.363 回答