Lou*_*isa 5 mysql sql performance sql-like
我们有一个包含产品信息的大表.几乎所有时间我们都需要查找包含特定单词的产品名称,但不幸的是这些查询需要永远运行.
示例:查找名称中包含"钢铁"和"102"字样的所有产品(不一定要彼此相邻,因此像"Ninja钢铁102 x"这样的产品是匹配的,就像"龙钢102 b"是吗).
目前我们这样做:
SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%' (相似单词的数量通常为2-4,但理论上可以是7-8或更多).
有更快的方法吗?
我们只是匹配单词,所以我想知道这是否可以帮助某种程度(即上面例子中的产品是匹配,但"Samurai swordsteel 102 v"不匹配,因为"钢铁"并不孤立).
我自己的想法是使用productnames中的单词创建一个帮助表,然后使用该表来获取匹配产品的ID.
即一个像:[id,word,productid]这样的表,所以我们得到例如:
1, samurai, 3
2, swordsteel, 3
3, 102, 3
4, v, 3
Run Code Online (Sandbox Code Playgroud)
只是想知道在MySQL中是否有内置的方法可以做到这一点,所以我不必实现自己的东西+维护两个表.
谢谢!
不幸的是,模式名称的开头有通配符。因此,MySQL 不能为此使用标准索引。
你有两个选择。首先,如果这些单词确实是关键字/属性,那么您应该有另一个表,每个单词一行。
如果不是这种情况,您可以尝试全文索引。请注意,MySQL 有最小单词长度的属性,并使用停用词列表。在构建索引之前您应该考虑这些。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |