Answers:
它称为“非锚定搜索模式”,在SQL中看起来像这样。
foo LIKE '%bar%'
如果您%
在任一侧都缺少a ,则可以说搜索模式分别锚定到字符串的开头或结尾。这行话来自regex世界。
foo LIKE 'bar%'
您会说,“搜索模式bar%
固定在字符串的开头 ”。
为了进行比较,PCRE用^
或$
标记锚定,看起来像^bar
或bar$
。PCRE需要使用令牌进行显式锚定,而SQL LIKE
语句是隐式进行锚定,并且需要显式%
创建“非锚定搜索模式”。
附带说明一下,您可以使用类似PostgreSQL中的内容,用三字母索引这些类型的表达式pg_trgm
我想到的第一件事是“无法精打细算”。在索引字段中搜索特定的字符串或字符串的第一部分,使您可以查找。如果搜索以通配符开头,则RDBMS将必须扫描整个索引,因为满足搜索谓词的值可能会出现在值集中。
考虑查看电话簿(如果您的年龄足以记住那些...)。您可以轻松地找到姓氏以“ Dan:”开头的人,然后您将手指指向Ds,然后再转到DAs,这样DAN便会组合在一起。如果要查找姓氏包括字符串“ ANIEL”的人,则必须阅读每页(扫描表格)。
这不是您真正的问题,但是您的模糊示例并不精确。
'run'
以0.5精度进行的模糊搜索将包括“ ran”,“ rud”和许多其他单词。SQL不不支持模糊搜索,你需要像Lucene的其他系统。'run%'
将始终包括“乳宁”和“符文”,并可以区分开始与包含('%run%'
包括“脱空”)作为@ 所罗门Rutzky建议' run '
(或' run% '
包括部分匹配项,例如“ bla bla runing bla”和“ bla runed bla bla”)。