我们有一个很大的表格,里面有产品信息。几乎所有的时间,我们都需要找到包含特定单词的产品名称,但不幸的是,这些查询需要花费很长时间才能运行。
示例:查找名称中包含" steel“和" 102”两个单词的所有产品(不一定要相邻,因此像“忍者钢铁102 x”这样的产品是匹配的,就像“龙钢102 b”一样)。
目前我们是这样做的:
SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%' (相似单词的数量通常是2-4个,但理论上可以是7-8个或更多)。
有没有更快的方法来做这件事?
我们只是匹配单词,所以我想知道这是否有帮助(例如,上面示例中的产品是匹配的,但“武士剑钢102 v”不是匹配的,因为"steel“不是独立的)。
我自己的想法是使用中的productname中的单词创建一个助手表,然后使用该表来获取匹配产品的is。
例如: id,word,productid这样的表,例如:
1, samurai, 3
2, swordsteel, 3
3, 102, 3
4, v, 3我想知道在MySQL中是否有一种内置的方法来做到这一点,这样我就不必实现我自己的东西+维护两个表。
谢谢!
发布于 2016-05-22 09:37:13
不幸的是,在模式名称的开头有通配符。因此,MySQL不能为此使用标准索引。
您有两个选择。首先,如果单词确实是关键字/属性,那么您应该有另一个表,每个单词一行。
如果不是这样,您可以尝试全文索引。请注意,MySQL具有最小单词长度的属性,并使用停用单词列表。在构建索引之前,您应该考虑到这些因素。
https://stackoverflow.com/questions/37369639
复制相似问题