我在我的应用程序上使用 Sphinx 进行全文搜索。我使用 aview
过滤products
表中的数据,Sphinx 为该视图编制索引。现在我在产品表下有一个带有相关标签的硬编码字段,但这并不好,因为标签可能会改变,我每次都必须操作硬编码字段。
所以我想我可以用 GROUP_CONCAT 创建视图,用这样的语法为我列出所有相关的标签:
SELECT p.id AS id, GROUP_CONCAT(t.tag SEPARATOR '|') AS tags,
UNIX_TIMESTAMP(p.created) AS created
FROM products p
INNER JOIN products_tags pt ON pt.product_id = p.id
INNER JOIN tags t ON t.id = pt.tag_id
AND p.deleted = 0
AND (p.images IS NOT NULL OR p.images <> '')
AND p.status LIKE 'listed'
GROUP BY p.id;
这个查询的问题是它需要很长时间才能运行。它真的很慢。要仅检索一条记录,最多需要 5 秒。这是EXPLAIN
输出:
1, SIMPLE, pt, ALL, , , , , 165029, Using temporary; Using filesort
1, SIMPLE, p, eq_ref, PRIMARY, PRIMARY, 4, trych_default.pt.product_id, 1, Using where
1, SIMPLE, t, eq_ref, PRIMARY, PRIMARY, 4, trych_default.pt.tag_id, 1,
我想知道是否有任何方法可以改进查询或者更好地解决我的问题。谢谢!