【发布时间】:2015-01-28 12:07:58
【问题描述】:
在我的数据库中包含大约 200 万行。这包含每行中的句子集合(不是英语)。
![Image of database][1]
例如,如果用户给出 'abcd' ,则与第 1,3 行匹配。因此两者都应该选择。 因为数据检索需要大量时间。我正在使用以下代码来检索数据。如果任何给定的单词与数据库匹配,则应选择这些行。
sb.append("SELECT Sentence FROM corpus Where ");
for(int k=0;k<wordList.size();k++){
sb.append( " Sentence like '%" + wordList.get(k) + "%' OR ");
}
sb.append(" 1=0");
rs2 = dbc.sqlExecute(sb.toString());
该选择词可能在行中的任何位置。那可能是前面或中间或结尾。我的问题是当用户给出一些词组时,需要花费大量时间来选择匹配的行。有什么适当的方法可以加快我的数据库检索速度吗?我认为索引可能不起作用,因为我不只搜索行的起点。匹配的单词可能包含行中的任何位置。这样做的有效方法是什么?检索需要大量时间。对我来说是个大问题。有人知道正确的方法吗?
【问题讨论】:
-
查看全文索引,但请注意匹配 > 50% 数据集的 slug 将不会被返回
-
@Strawberry 是否适用于其他语言而不适用于英语?您对此有适当的指导吗?
-
FULLTEXT 支持大多数多字节字符集。例外是对于 Unicode,可以使用 utf8 字符集,但不能使用 ucs2 字符集。请参阅手册。
-
@Strawberry 你有指南或教程与此相关的任何链接吗?" 50% 的数据集不会被返回 "这是什么意思?
-
去谷歌。键入 MySQL 全文。按回车。单击出现的第一件事。避免提出愚蠢和疏远的问题。
标签: mysql sql database indexing