如何加快MySQL产品搜索结果?

时间:2010-10-30 09:47:05

标签: php mysql

我正在基于从jquery自动完成函数发送的类型化数据对mysql数据库进行查询。它工作正常但需要几秒钟(5-6 +)才能获得返回的建议。目前,数据库中有大约200,000个产品条目,预计将有超过一百万个条目。我怎样才能加速这件事,因为一旦添加了更多的条目,就可以说在某人已经输入完整的搜索查询之前,结果可能永远不会显示,这根本不会使他们受益。

MySQL表是:

CREATE TABLE `products` (
  `id` int(12) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `description` text NOT NULL,
  `category` int(12) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `name` (`name`),
  KEY `category` (`category`)
) ENGINE=MyISAM;

CREATE TABLE `products_pics` (
  `id` int(12) NOT NULL auto_increment,
  `product_id` int(12) NOT NULL default '0',
  `thumb` blob NOT NULL,
  `image` longblob NOT NULL,
  `type` varchar(6) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `product_id` (`product_id`),
) ENGINE=MyISAM;

搜索和结果返回的PHP代码是:

if(isset($_REQUEST['queryString'])) {
 $queryString = addslashes($_REQUEST['queryString']);
 if(strlen($queryString) > 0) {
  $result = mysql_query("SELECT * FROM products WHERE name LIKE '%" . $queryString . "%' ORDER BY name LIMIT 8", $db);
  if(mysql_num_rows($result) > 0){
        while($myrow = mysql_fetch_array($result)){
        $query = mysql_query("SELECT id FROM products_pics WHERE product_id='$myrow[id]' LIMIT 1", $db);
        if(mysql_num_rows($query) > 0){
        echo '<a href=""><img src="/ajax/search_images.php?id=' . $myrow[id] . '" width="55" border="0" alt="" />';
        }
        else {
        echo '<a href=""><img src="/images/items/no-img.jpg" width="55" border="0" alt="" />';
        }
        $name = stripslashes($myrow[name]);
        if(strlen($name) > 35) { 
         $name = substr($name, 0, 35) . "...";
        }             
        echo '<span class="searchheading">' . $name . '</span>';
        $description = stripslashes($myrow[description]);
        if(strlen($description) > 80) { 
         $description = substr($description, 0, 80) . "...";
        }
        echo '<span>' . $description . '</span></a>';
       }
       echo '<span class="seperator"></span>';
   } 
  }
 } 

再次感谢大家,感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

执行LIKE %keyword%非常慢。由于您正在执行自动填充功能,因此可以放弃第一个%,执行:LIKE keyword%

这将大大加快您的查询速度。

此外,尝试在MYSQL中执行您的查询,例如'EXPLAIN&lt;&gt;'。这将为您提供有关MySQL如何执行查询以及可能优化的位置的信息。

另一种选择可能是使用MyISAM的全文本搜索功能:http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html