0

我希望有人了解mysql和mysql(php脚本)中的查询效率,可以给我一些关于以下两种方法中哪种方法更有效的指导。

简化了很多事情,我有两个 mysql 表。

表 A = 200 个单词,每个单词是一个标签。表 B = 每 4 小时上传 8 个标题,因此,每天总共上传 (8 x 6) = 48 个标题,每个标题平均有 10 个单词。

我有一个 php 脚本,在每天结束时,获取表 A 中的每个单词,查看是否在 48 个标题中的任何单词中找到它,如果找到,然后用找到的词。目前,脚本运行良好。

所以基本上它所做的是在 48 个标题中进行 200 次搜索,并在找到表 a 中的一个单词时适当地标记每个标题。

现在,我对网站进行了更改,并希望标记这些标题,而不是每天一次,每 4 小时一次。因此,每次脚本标记时,它只需要标记 8 个新闻(而不是 48 个)并执行相同的 200 次搜索,但仅在 8 个标题中而不是在 48 个标题中进行。它将每天执行 6 次此操作。

更改脚本是否会更有效率,因此与其在 8 个标题(总共有(8 x 10 = 80 个单词)中进行 200 次搜索,不如颠倒它的方式?这意味着,以另一种方式更改它轮所以它看起来是否在表 A 的 200 个单词中出现了 80 个单词(出现在表 B 的 8 个标题中)?

在某些时候,每 2 小时会收集一次标题(因此只有 4 个标题),然后是 1 个(所以 2 个标题),因此要使用脚本更新的“标题”数量会随着时间的推移而减少。

改变脚本的工作方式会更有效吗?改进是否足够相关?

我在想,如果走这条路是要走的路,那么最佳方式可能是双向进行,也就是说,首先看看它要标记多少个标题和多少个标签。如果需要标记多于 X 个标题,则使用脚本 A(实际脚本),但如果需要标记少于 X 的标题,则使用新脚本 B。

我已经解释了这一点,并在小范围内对其进行了简化。该脚本现在在 200 个不同的站点(未来还会有更多)中运行(每个站点都有不同数量的标签和不同数量的每小时要标记的标题),并且很快可以在更多站点上运行,因此改进脚本处理这个问题的效率如何,可以大大提高网站的整体效率。

做这个改变有意义吗?是否可以进行计算以查看此更改何时有意义或如何计算我可能获得的效率可能提高

4

1 回答 1

0

您的数字似乎足够低,以至于任何工作方法对我来说都足够快。要真正判断更改是否重要,您必须对事物进行基准测试,因为这方面的计算很难制定,因为它们取决于很多因素。

也就是说,我相信从标题中提取单词并在标签表中搜索它应该比当前的实现更快。我的推理不是基于单词的数量,而是基于索引的使用:标签列表通常是非常静态的,并且在标签词上有一个索引,您将在其中寻找完全匹配的, 正确的?另一方面,标题会经常更改,以至于为其创建索引实际上可能会降低性能。由于您将寻找子字符串匹配,因此普通(即非全文)索引将没有任何用处。

所以我想说确保标签列表有一个正确的索引。当新标题出现时,将它们拆分为 PHP 中的单词,然后将这些单词与索引一起插入到临时 MySQL 表中。然后您可以发出单个更新查询来添加所有标签,然后删除临时表。更新看起来像这样:

INSERT INTO post_tags (post_id, tag_id)
SELECT temp_words.post_id, tags.id
FROM temp_words INNER JOIN tags ON temp_words.word = tags.name

这假设您有一个表post_tags,其中每一行表示一个帖子上的一个标签,正确的数据库规范化需要它的方式。temp_tags是保存新处理标题单词的表。

于 2013-01-15T13:37:08.653 回答