这是我的代码:
$sql = "SELECT *,MATCH (CUIT,DENOMINACION) AGAINST ('%{$word}%') AS Score FROM cuits WHERE";
$sql_end = '';
foreach($words as $word) {
$sql_end .= " AND MATCH (CUIT,DENOMINACION) AGAINST ('%{$word}%' IN BOOLEAN MODE) AND BAJA=0 ";
$sql_end2 = "order by DENOMINACION limit $inicio, $TAMANO_PAGINA";
}
这很慢。我怎样才能提高速度?
答案 0 :(得分:1)
在FULLTEXT搜索中使用LIKE
样式的通配符字符串%
没有意义。因此,请将AGAINST ('%{$word}%')
更改为AGAINST ('{$word}')
并查看是否有帮助。
此外,FULLTEXT可以同时匹配多个单词,因此不需要为每个单词重复整个MATCH
子句。而是尝试
SELECT *,MATCH (CUIT,DENOMINACION) AGAINST ('word word word word') ...
如果单词系列是一个短语,您可以停止使用布尔FULLTEXT模式并使用自然语言模式,如第一个MATCH
子句所示。
请注意,FULLTEXT在小表上确实非常奇怪,只有不到几百行。这使得对小桌子的测试变得困难。
最后,确保正确构造了FULLTEXT索引。