在 Mysql 5.0 中使用具有不同**组合**的键匹配/比较数据库字段

Posted

技术标签:

【中文标题】在 Mysql 5.0 中使用具有不同**组合**的键匹配/比较数据库字段【英文标题】:Matching /comparing a Database Field using a Key with different **combination** in Mysql 5.0 【发布时间】:2014-09-24 09:21:44 【问题描述】:

我在 MYSQL 5.0 中有一个 表:db_details,其中表字段:说明10,0000 个条目 。我想要一个最佳方法来搜索一个key并获得不同组合的结果。例如: p>

description[其实是它的10000]字段的4个条目如下:

描述 1:我想见我的朋友

描述 2:我的朋友有一支红色的和黄色的盒子

描述 3:这个黄色盒子属于我的朋友

描述4:他是个医生

我想将这些与 key : pen box friend 进行比较,并且应该按照 order 得到结果:首先是 description 2,然后是 description 3 然后 description 1 [这是因为 description 2 的命中率最高,然后是 description 3,依此类推]

请帮助我。我想知道它应该怎么做。因为它是一个 Huge 数据库,我想在没有 延迟 的情况下得到它,无论是否使用页面偏移。 p>

【问题讨论】:

当然,您还没有优化您的 mysql 实例,也没有告诉我们您使用的是什么存储引擎。软件在硬件上运行。除非您允许软件以最佳方式使用该硬件,否则任何“方法”都不会产生性能。此外,100k 行并不大,它很小。请提供您尝试过的内容以及您使用的 MySQL 配置以及它运行的硬件。 我从数据库中读取了表并对其进行了 linq 操作( var searchTerms = Comparate.Split(' '); var results = inputs .GroupBy(sentence => sentence.Split(' ')) .Where(grouping => searchTerms.Intersect(grouping.Key).Any()) .OrderByDescending(grouping => grouping.Key.Count()) .SelectMany(grouping => grouping); 我找不到任何查询来做mysql 5.0.100k上面的操作对你来说似乎很小..但是当前的方法消耗了足够的时间..如果请告诉我这个问题的解决方案 这很耗时,因为您的数据库配置不正确。 100k 行很小,因为它不占用太多空间并且可以放入 RAM,因此可以快速使用。请仔细阅读我写的内容,不要只是在我这里转储一些文本来解密。试着理解我告诉你的。配置您的数据库,以便它可以利用您的硬件 (RAM),然后它会很快。你还没有说你使用什么配置,你使用什么存储引擎以及它运行在什么硬件上。 我正在使用笔记本电脑 [i5] 并且引擎是 innodb ..我对配置和所有内容了解不多..这与解密无关..只是因为我没有得到结果.. 默认情况下,InnoDB 使用 8 MB RAM。数据库管理员倾向于使用大量内存,例如服务器所拥有内存的 85% - 90%。用于控制使用多少内存的变量称为innodb_buffer_pool_size。如果您有大约 2 gigs 的免费内存,我建议您编辑您的my.cnf,找到[innodb] 部分并添加innodb_buffer_pool_size = 2G。保存文件,重启 mysql,再次运行查询。 【参考方案1】:

如果你想做这个,我觉得Shpinx更适合做这个工作。

Sphinx 速度更快,您可以设置结果的优先级。

【讨论】:

就我而言,我只能在 0.02 秒内得到结果。甚至表包括大约 3000 万行!【参考方案2】:

STEP 1 : 创建表描述(descr TEXT,fulltext(descr));

STEP 2 : 插入描述值('我想见我的朋友'),('我的朋友有一支红色的笔和黄色的盒子'),('这个黄色的盒子属于我的朋友'),('他是医生');

STEP 3 : select * from description where match(descr) against('pen boxfriend');

输出如下:(按您的要求)

我的朋友有一支红色的笔和一个黄色的盒子

这个黄色盒子是我朋友的

我想见我的朋友

注意:但与狮身人面像相比会比较慢。

【讨论】:

包括可以支持您关于比狮身人面像慢的陈述的来源。包括为什么。如果你不这样做,这不是事实,这只是你的意见 - 使答案毫无意义。 全文不是Mysql 5.0中的类型。

以上是关于在 Mysql 5.0 中使用具有不同**组合**的键匹配/比较数据库字段的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 5.0 LAST_INSERT_ID() 升级到 5.6 后有所不同

MySQL ----- 组合查询 UNION(十五)

MySQL ----- 组合查询 UNION(十五)

MySQL 5.0 索引 - 唯一与非唯一

实体框架代码优先:在具有不同连接列的实体中展平组合

如何在 Keras 中组合两个具有不同输入大小的 LSTM 层?