繁体   English   中英

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

[英]How can I speed up a MySQL product search result?

我正在基于从jquery自动完成功能发送的类型化数据对mysql数据库进行查询。 它工作正常,但需要几秒钟(5-6 +)才能获得返回的建议。 当前数据库中大约有200,000个产品条目,预计将超过100万个条目。 我如何加快处理速度,因为一旦添加了更多条目,就必然会导致结果可能永远不会在有人输入完整搜索查询之前就显示出来,这对他们完全没有好处。

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>';
   } 
  }
 } 

再次感谢大家,感谢您的帮助。

LIKE %keyword%这样的操作非常慢。 因为您正在执行自动完成,所以您可以丢弃第一个% ,例如: LIKE keyword%

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

另外,尝试在MYSQL中执行查询,例如“ EXPLAIN <>”。 这将为您提供有关MySQL如何执行查询以及可能在何处进行优化的信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM