Mysql匹配...反对简单就像“%term%”

时间:2009-12-24 01:19:44

标签: mysql full-text-search

出了什么问题:

$term = $_POST['search'];

function buildQuery($exploded,$count,$query)
{
   if(count($exploded)>$count) 
   {
      $query.= ' AND column LIKE "%'. $exploded[$count] .'%"';
      return buildQuery($exploded,$count+1,$query);
   }
   return $query;
}

$exploded = explode(' ',$term);
$query = buildQuery($exploded,1,
'SELECT * FROM table WHERE column LIKE "%'. $exploded[0] .'%"');

然后查询db以按特定顺序检索结果,而不是使用myIsam-only sql match ...对吗?

它会大大降低性能吗?

2 个答案:

答案 0 :(得分:6)

不同之处在于MySQL在幕后使用的算法中找到了您的数据。全文搜索还允许您根据相关性进行排序。大多数条件下的LIKE搜索将进行全表扫描,因此根据数据量,您可以看到性能问题。处理大型行集时,全文引擎也可能存在性能问题。

另一方面,我要添加到此代码中的一件事是逃避爆炸值。也许打电话给mysql_real_escape_string()

答案 1 :(得分:6)

您可以查看我最近为MySQL大学所做的演示:

http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

幻灯片也在这里:

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

在我的测试中,使用LIKE '%pattern%'比使用MySQL FULLTEXT索引慢300多倍。我的测试数据是来自StackOverflow 10月数据转储的150万个帖子。