3

我想问是否有人可以帮助我解决这个问题

SELECT count(MATCH(product_text) AGAINST('lorem*' in boolean mode)) AS score FROM table_products WHERE MATCH (text) AGAINST ('lorem*' in boolean mode) limit 0,50000

列文本上有全文索引。Am 查询将行总和作为分数返回。我不会计算全文搜索结果。如果结果(行)数大于 50000,则返回 count-sum 50000,否则返回结果的确切计数。

问题是,如果用户尝试查找例如单词“lorem”并且该单词出现在表 fe 中超过 500 000 x,那么在 150 万行的表宽度上它并不快。

我也试过

SELECT id,name,product_text,price, MATCH(product_text) AGAINST('lorem*' in boolean mode) AS score FROM table_products WHERE MATCH(product_text) AGAINST('lorem*' in boolean mode) and show_product='1' limit 0,50000

...宽度 php mysql_num_rows

另一个问题是,在以下查询中,mysql 仅使用全文索引并按另一列或按分数排序比慢

SELECT id,name,product_text,price, MATCH(product_text) AGAINST('lorem*' in boolean mode) AS score FROM table_products WHERE MATCH(product_text) AGAINST('lorem*' in boolean mode) and show_product='1' order by score desc limit 0,50000

分别 (..按名称订购,按价格订购)

还有其他更好更快的方法吗?

非常感谢您的帮助。

4

0 回答 0