【发布时间】:2021-06-21 04:10:55
【问题描述】:
我有一个大约100万条记录的多用户数据库管理系统,其结构如下:
- 后端(MySQL)
- “DNames”表
- “全名”字段
- “ID”字段
- “DNames”表
- 前端(MS 访问)
- “levenshtein”function
- “列夫”查询
- “lev_dist”字段(使用上述函数计算出的 levenshtein 距离,按 asc 排序)
- “全名”字段
- “ID”字段
- “结果”形式的“srch”文本框
我的问题是,当我运行查询(即使用“srch”文本框)而不进行排序时,它的速度足够快,但是当我使用排序时,大约需要 30 到 90 秒才能完成(取决于电脑规格)。我需要排序操作来找到“srch”文本框中的文本和数据库之间的前 10 个(最接近的)匹配,那么我怎样才能加快这个过程呢?有没有办法让它达到最大 5 秒?此过程可以同时从 5 台 PC 上运行。我尝试使用 MySQL levenshtein function ,但花了 2 分钟!!
【问题讨论】:
-
问题是mysql需要计算所有满足查询的记录的距离,然后对结果集进行相应的排序。它不能使用任何索引,也不能使用任何快捷方式。如果您想使用这样的文本分析,那么我很遗憾地说,传统的 rdbms 可能不是您的最佳工具。将整个数据集读入内存并执行分析,这是适合您内存的数据集的最佳行动方案。市面上有一些特定的文本分析工具,它们也可以为更大的数据集加快计算速度。
-
你能发布查询和levenshtein函数/查询吗
标签: mysql database ms-access levenshtein-distance