测试代码:
$key='统计出来';
$key1='media';
$sql=array(
"select noindex from t1 where noindex like '%$key%'",
"select `index` from t2 where `index` like '%$key%'",
"select `fulltext` from t3 where `fulltext` like '%$key%'",
"select noindex from t4 where noindex like '%$key1%'",
"select `index` from t5 where `index` like '%$key1%'",
"select `fulltext` from t6 where `fulltext` like '%$key1%'"
);
//$sql=array(
// "select title from t1 where title = '$key'",
// "select title from t2 where titleindex = '$key'",
// "select title from t3 where titlefulltext = '$key'"
//);/*while($ct<1000000){
$title=get();
mysql_query('insert into t1(noindex) values(\''.$title.'\')',$conn) or die(mysql_error());
mysql_query('insert into t2(`index`) values(\''.$title.'\')',$conn) or die(mysql_error());
mysql_query('insert into t3(`fulltext`) values(\''.$title.'\')',$conn) or die(mysql_error());
$title=get(true);
mysql_query('insert into t4(noindex) values(\''.$title.'\')',$conn) or die(mysql_error());
mysql_query('insert into t5(`index`) values(\''.$title.'\')',$conn) or die(mysql_error());
mysql_query('insert into t6(`fulltext`) values(\''.$title.'\')',$conn) or die(mysql_error());
$ct++;
}*/foreach($sql as $s){
$__time_start = microtime(true);
$ct=0;
$rs=mysql_query($s,$conn) or die(mysql_error());
while($row=mysql_fetch_assoc($rs)){
//echo $row['title'].'<br/>';
$ct++;
}
$__time_end = microtime(true);
$__time = $__time_end - $__time_start;
print "
执时时间{$__time}秒:{$s},{$ct}条记录;<hr/>
";
}

解决方案 »

  1.   

    我全文索引语法错了:执时时间5.09530210495秒:select noindex from t1 where noindex like '%统计出来%',30346条记录;
    --------------------------------------------------------------------------------
     执时时间0.743270874023秒:select `index` from t2 where `index` like '%统计出来%',30346条记录;
    --------------------------------------------------------------------------------
     执时时间0.0223591327667秒:select `fulltext` from t3 where MATCH (`fulltext`) AGAINST ('统计出来' IN BOOLEAN MODE),0条记录;
    --------------------------------------------------------------------------------
     执时时间11.1527981758秒:select noindex from t4 where noindex like '%media%',112345条记录;
    --------------------------------------------------------------------------------
     执时时间1.66833496094秒:select `index` from t5 where `index` like '%media%',112345条记录;
    --------------------------------------------------------------------------------
     执时时间12.2376759052秒:select `fulltext` from t6 where MATCH (`fulltext`) AGAINST ('media' IN BOOLEAN MODE),112345条记录;
    --------------------------------------------------------------------------------看来全文索引中文无效。
    请高手指点如何正确使用 索引和全文索引 吧!
      

  2.   

    我觉得你要测试sql的效率应该把
    $__time_end = microtime(true);
    放在$rs=mysql_query($s,$conn) or die(mysql_error());语句之后
    不应该放在循环之后。关于“如何正确使用   索引和全文索引”学习中。。
      

  3.   

    请比较explain select   `index`   from   t2   where   `index`   like   '%统计出来%';explain select   `index`   from   t2   where   `index`   like   '%统计出来';explain select   `index`   from   t2   where   `index`   like   '统计出来%';
      

  4.   

    你前两种方式都不会使用索引。
    因为like %abc%这种方式不会使用任何索引。
    而全文索引对速度没有提升,这个在mysql手册上早已经说过了。
    之所以会有速度差别,是因为你的执行先后顺序不一样,数据库缓存了先前的结果。
      

  5.   

    建议 如果使用 t1 like '%xxxxx%' 时,改用 instr(t1, 'xxxxx')
    match 查询不支持多字节字符,想用中问的全文索引,用 hightman 的MySQL 插件吧,挺好用的