php - 搜索页面加载速度极慢(MySQL 和 PHP)

标签 php mysql search performance

我使用 PHP 在页面上制作了一个简单的搜索框,用户可以在其中键入关键字来查找某些项目的照片。我正在使用 MySQL 数据库。我修剪结果并仅显示 10 以使加载更快,但某些关键字集导致浏览器在 IE 和 Firefox 上挂起。当这种情况发生在 IE 上时,我可以看到超过 10 个结果的照片轮廓(只是剪影),右上角有一个“X”标记,类似于当您加载照片但网页上不存在照片时,即使我编写的代码只显示 10 个结果。该数据库有超过 10,000 个条目,我想它可能正在尝试显示数据库中的整组照片。这是我正在使用的一些代码。

我正在使用下面的函数来创建查询。 $keyword 是用户输入的关键字数组。

function create_multiword_query($keywords) {
// Creates multi-word text search query
$q = 'SELECT * FROM catalog WHERE ';
$num  = 0;
foreach($keywords as $val) {    // Multi-word search
    $num++;
    if ($num == 1) {
        $q = $q . "name LIKE  '%$val%'"; }
    else {
        $q = $q . " AND name LIKE  '%$val%'";}
} 
$q = $q . ' ORDER BY name';
return $q;
//$q = "SELECT * FROM catalog WHERE name LIKE \"%$trimmed%\" ORDER BY name";
}

并显示结果。 MAX_DISPLAY_NUM 为 10。

$num = 0;
while (($row = mysqli_fetch_assoc($r)) && ($num  < MAX_DISPLAY_NUM)) {  // add max search result!
    $num++;
    print_images($row['img_url'], '/_', '.jpg');    // just prints photos               
}

我是 PHP 的新手,但我似乎找不到我的代码有任何问题。也许我编写这些算法的方式不太适合 PHP 或 MySQL?你们能帮我解决这个问题吗?我可以根据需要发布更多代码。 TIA!!

最佳答案

不要在 PHP 中限制您的搜索结果,在使用 LIMIT 关键字的 SQL 查询中限制它们。

如:

select * form yourtable where ... order by ... limit 10;

顺便说一句,那些 LIKE '%something%' 可能很昂贵。也许你应该看看 Full text indexing and searching .

如果你想显示一个 More... 链接或类似的东西,一种方法是将你的查询 limit 为 11 并且只显示前十名。

关于php - 搜索页面加载速度极慢(MySQL 和 PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6513285/

相关文章:

node.js - Mongodb全文搜索,获取文档中匹配的字符串

search - 通过 text_general 搜索时出现重复

javascript - 谁能解决这个问题。 jQuery $.post

php - 在一个 PHP 脚本中输出多个 JavaScript 文件的可靠方法? (避免意外 token 非法)

php - 是否有可能计算类似 mysql 结构的匹配数?

php - 构建 SQL 查询时是否应包含分号

python - 将变量与字典中的第二级进行匹配

javascript - 如何使用分页将 html 表导出到 excel

mysql - 选择查询加入一个表

mysql - 我以某种方式设法在 MySQL 表中获得两个具有相同名称的索引,这是一个问题吗?