极慢的搜索页面加载(MySQL和PHP)

时间:2011-06-28 21:27:48

标签: 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 !!

5 个答案:

答案 0 :(得分:5)

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

如:

select * form yourtable where ... order by ... limit 10;
顺便说一句,那些LIKE '%something%'可能很贵。也许你应该看看Full text indexing and searching

如果您想显示More...链接或类似内容,一种方法是limit您的查询为11,只显示前十个。

答案 1 :(得分:3)

除了查询中的LIMIT之外,我还会查看mysql full text search(如果您的表格具有MyISAM格式)。

答案 2 :(得分:2)

为什么不使用MySQL来限制返回的搜索结果数量?

http://dev.mysql.com/doc/refman/5.0/en/select.html

答案 3 :(得分:1)

为您的查询添加LIMIT。

您正在从DB中检索所有行(从DB到服务器的大量字节),然后您将过滤前10行。

$q = $q . ' ORDER BY name LIMIT 10';

答案 4 :(得分:0)

根据{{​​3}}(幻灯片24-26),

LIKE也很慢。您应该首先尝试使用Flickr。如果您的网站看起来仍然很慢,那么还有其他一些非常快速(呃)/流行的替代方案:

您需要学习/安装这些技术,这有点令人讨厌,但在需要时非常值得投资。