【发布时间】:2020-10-09 09:54:30
【问题描述】:
我有一个看起来像这样的用户表用于测试:
USER
----------------------------------
id username name
1 "djangoIsAwesome" "Ale"
2 "craze123" "John"
3 "hope this works" "JJ"
4 "Rage" "Ludo"
5 "coolguy1996" "Frank"
我需要执行非常高效的查询,以便在有人输入用户搜索时做出响应。通常人们会使用 LIKE %string% 策略,但我不能在这里使用,因为 USER 表有数百万行。
我在 (username, name) 上创建了全文索引,但似乎全文索引不支持 substring 查询。
看来我最后的手段是使用 INSTR()。任何类型的列索引都会使 INSTR() 函数受益吗?
查询示例:
“J”、“wesome”、“96”、“k”
【问题讨论】:
-
"J", "96", "k" - 太短(参见
innodb_ft_min_token_size变量)。 “wesome”全文不搜索子字符串。 -
@Akina 除了 LIKE %string% 之外,MySQL 中是否还有其他功能可以搜索子字符串?
-
INSTR() 和 LOCATE() 函数。
-
@Akina 任何组合列索引是否有利于 INSTR 或 LOCATE 查询?
-
没有索引可以改善子字符串搜索。除了严格从值的开头搜索。
标签: mysql sql django database-design full-text-search