SQL匹配慢速查询

时间:2010-11-20 22:09:42

标签: sql mysql

我有一个包含200多个(行)产品的表,其中包含44个字段(列)。 我试图根据'NAME'字段(varchar 160)查询此表,我有一个全文索引。

这是一个使用三个字$关键字执行71.34秒的查询, 使用两个单词$ keyword执行62.47秒,使用单个单词$ keyword执行0.017秒。

SELECT ID,
       MATCH(NAME) AGAINST ('$keyword') as Relevance,
       MANUFACTURER,
       ADVERTISERCATEGORY,
       THIRDPARTYCATEGORY,
       DESCRIPTION,
       AID,
       SALEPRICE,
       RETAILPRICE,
       PRICE,
       SKU,
       BUYURL,
       IMAGEURL,
       NAME,
       PROGRAMNAME
    FROM products 
   WHERE MATCH(NAME) AGAINST ('$keyword' IN BOOLEAN MODE) 
GROUP BY NAME
  HAVING Relevance > 6
ORDER BY Relevance DESC LIMIT 24

如何优化此查询,以便在2个以上的字$关键字查询中表现更好?

2 个答案:

答案 0 :(得分:1)

然而,这可能不是你想要的答案:

使用表格进行大型全文搜索永远不会很快。我建议查看像Sphinx这样的全文引擎。

作为额外的好处,您还可以在Sphinx中进行相关性匹配,因为它将返回按相关性排序的结果。一旦Sphinx返回匹配的ID,您就可以在查询的WHERE子句中只使用一个IN语句,并选择您需要的其他数据。

我还建议查看Sphinx的扩展查询语法,因为这样可以匹配邻近和单词顺序等多个单词。

答案 1 :(得分:0)

table partioning是MySQL的选项吗?至于SQL Server,它是一种在这种情况下有用的显示。

或者更改标准MATCH子句的WHERE ... LIKE函数。我不知道MySQL,所以我担心会得到较少的帮助。遗憾!