首页 > 解决方案 > 如何缩小 MySQL 结果以提高 PHP 效率?

问题描述

在 PHP 中,我使用similar_text 来比较来自 MySQL 的数万行。

$mostSimilarText = "";
$mostSimilarPercent = 0;

//SELECT * FROM table

while($row = $stmt->fetch()){ /* 10,000 results*/
    similar_text("hello world", $row["source"], $percentMatch);

    if($percentMatch > $mostSimilarPercent) {
        $mostSimilarPercent = $matchPercent;
        $mostSimilarText = $row["source"];
    }
}
//Now I have the most similar text and percentage.

该代码有效,但运行速度非常慢,尤其是在结果有负载的情况下。我的目标是优化它。我试图弄清楚如何限制 MySQL 结果而不是SELECT * FROM table. 这将提高效率。

我已经尝试过使用LIKE 'hello world',但这将排除诸如“hello word”之类的结果(注意缺少的 L)。我需要限制 MySQL 结果,而不需要完全消除超过 75% 或多或少相似的文本。

有人对我如何提高性能有任何提示吗?

标签: phpmysql

解决方案


我会建议DB的组合。在我为你做一些例子之前:想象一下你的关系模型都是索引非关系的。

Flat DB/Document DB 可以做到这一点。想一个文件说类似

{
    "name": "Down to the river"
    "artist": "BruCe Boss"
    "sql_id": 1391
}

在此搜索“相似性”变得更加容易和快捷。'下来蜂巢',一个文件。

现在,将其扩展到您的所有音乐库。在 1 个文件中,您的查询只是对具有该信息的 1 个文件的读取。它是一个索引您的数据库的文档。查询比读取所有记录等要快,结果有 SQL id 可以读取。

它通过人们搜索的更多小信息来丰富您当前的数据库,从而加快查询速度。

我将用一个很好的例子进行编辑,但上面应该得到它的主要内容。


推荐阅读