我试图让在一组相互链接的 MySQL 表上执行关键字搜索变得快速和容易。
有一个具有唯一“itemID”的项目表,相关数据分布在其他表中,所有表都通过 itemID 链接。
我创建了一个视图,它将大部分信息连接成一个可用的形式。这使搜索变得非常容易,但对性能没有帮助。这是我第一次使用视图,也许不是正确的用途。如果有人能给我一些指点,我将不胜感激。
一个简化的例子是:
物品表:
itemID | name
------ -------
1 "James"
2 "Bob"
3 "Mary"
关键词表:
keywordID | itemID | keyword
------ ------- -------
1 2 "rabbit"
2 2 "dog"
3 3 "chicken"
加上更多的关系......
我的观点:(使用 CONCAT_WS、GROUP_CONCAT 和一些 JOIN 创建)
itemID | important_search_terms
------ -------
1 "James ..."
2 "Bob, rabbit, dog ..."
3 "Mary, chicken ..."
然后我可以在视图中搜索“mary”和“chicken”并轻松找到 itemID=3 匹配项。杰出的!
问题是,它似乎在为每次搜索都做 CONCAT 和 JOIN 的所有工作,但效率不高。我目前的测试数据搜索大约需要 2 秒,这是不切实际的。
我希望视图会以某种方式被缓存,但也许我没有以正确的方式使用它。
我可以有一个包含我定期更新的搜索信息的实际表格,但它看起来并不像我希望的那样整洁。
如果有人有任何建议,我将不胜感激。非常感谢