3

我有一个包含 15k 行的澳大利亚邮政编码和地址的 db 表,每行如下所示:

pcode   |   suburb      |   state
2048    |   Westgate    |   NSW
2066    |   Belina      |   NSW

使用 jQuery 自动完成触发了一个输入字段,我拆分了用户输入并构建了一个 LIKE 查询,在郊区和邮政编码字段上进行搜索。

这可以解决问题:

SELECT address_id as id, CONCAT(suburb,' ',postcode) as value FROM address WHERE address_id != ''"; 

foreach ($keywords as $keyword)
{
      $query .= " AND (postcode like '".$keyword."%' OR suburb like '%".$keyword."%')";
}

我目前在任何列上都没有索引(除了主键)。我会更好地使用某种全文索引并更改搜索吗?或者考虑到数据量(不是很大),我正在做的事情是否足够有效

4

2 回答 2

1

使用索引的时候是不能用的LIKE '%something%',所以如果你需要能在字符串中间搜索,根本不用索引

这就是 MATCH 命令允许前缀通配符但不允许后缀通配符的原因。由于单个词被索引,后缀通配符不可能像索引那样管理。您不能立即从索引中检索 '*nited states',因为左字符是索引中最重要的部分。

来源

于 2012-05-06T01:29:28.397 回答
1

最有效的索引类型是数字列索引。正如其他人所建议的,15k 并不是一个大的记录集,但就用户体验而言,当您键入单个字符时,可能会有大量记录,从而使其成为可用性的噩梦。

建议 - 在你的 sql 中使用一个 LIMIT 子句,这样你就可以将你的结果集限制在一个可管理的大小。让我们说一次 15 条记录。

于 2012-05-06T01:44:33.060 回答