[英]MySQL LIKE alternative
是否有LIKE的替代方案。 注意我不能使用全文搜索。
这是我的mysql代码。
SELECT *
FROM question
WHERE content LIKE '%$search_each%'
OR title LIKE '%$search_each%'
OR summary LIKE '%$search_each%'
好吧,MySQL具有正则表达式,但是我想问你多个LIKE到底出了什么问题。
我知道,当表中得到真正的大,但是这是很少使用的MySQL老百姓关注的问题也不会很好地扩展(没有意思要贬低到MySQL那里,它只是我注意到很多人似乎都使用它的小数据库,将大型数据库留给Oracle,DB2或SQLServer(或ACID属性不太重要的NoSQL)之类的工具。
如您所说:
我打算将其用于大型网站。
那么您应该完全避免喜欢。 而且,如果您不能使用全文本搜索,则需要推出自己的解决方案。
我们过去使用的一种方法是在表上使用插入/更新/删除触发器来填充另一个表。 插入/更新触发器应:
然后使用该表进行搜索,不是多喜欢几乎可以肯定要快得多。 从根本上讲,这是一种自卷式的全文搜索,您可以在其中微调和控制实际应索引的内容。
这样的优点是在选择过程中速度很快,而在更新过程中成本较低。 请记住,这对于读取次数多于写入次数(大多数情况下)的表是最好的,因为它会摊销在所有读取操作中索引单个单词的成本。 每次读取都不会产生该成本,最好仅在数据更改时才这样做。
而且,顺便说一句,删除触发器将只删除索引表中所有引用真实记录的条目。
表结构如下所示:
Comments:
id int
comment varchar(200)
-- others.
primary key (id)
Words:
id int
word varchar(50)
primary key (id)
index (word)
WordsInComments:
wordid int
commentid int
primary key (wordid,commentid)
index (commentid)
对于第三种标准格式,将id-id(即,单独的Words和WordsInComments表)设置为多对多关系而不是id-text(将它们合并为一个)是正确的做法,但是您可能要看一下交易如果您了解其中的含义,可以节省存储空间以提高速度并进行组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.