我有一个包含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个以上的字$关键字查询中表现更好?
答案 0 :(得分:1)
然而,这可能不是你想要的答案:
使用表格进行大型全文搜索永远不会很快。我建议查看像Sphinx这样的全文引擎。
作为额外的好处,您还可以在Sphinx中进行相关性匹配,因为它将返回按相关性排序的结果。一旦Sphinx返回匹配的ID,您就可以在查询的WHERE子句中只使用一个IN语句,并选择您需要的其他数据。
我还建议查看Sphinx的扩展查询语法,因为这样可以匹配邻近和单词顺序等多个单词。
答案 1 :(得分:0)
table partioning
是MySQL的选项吗?至于SQL Server,它是一种在这种情况下有用的显示。
或者更改标准MATCH
子句的WHERE ... LIKE
函数。我不知道MySQL,所以我担心会得到较少的帮助。遗憾!