通过自动完成、类似MySQL或全文搜索搜索15k地址行?

通过自动完成、类似MySQL或全文搜索搜索15k地址行?,mysql,query-optimization,jquery-autocomplete,Mysql,Query Optimization,Jquery Autocomplete,我有一个包含澳大利亚邮政编码和地址的db表,每行有15k行,每行如下所示: pcode | suburb | state 2048 | Westgate | NSW 2066 | Belina | NSW 使用jQuery autocomplete触发了一个输入字段,我分割了用户输入并构建了一个LIKE查询,搜索郊区和邮政编码字段 这就是诀窍: SELECT address_id as id, CONCAT(suburb,' '

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

pcode   |   suburb      |   state
2048    |   Westgate    |   NSW
2066    |   Belina      |   NSW
使用jQuery autocomplete触发了一个输入字段,我分割了用户输入并构建了一个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."%')";
}

我目前没有任何列的索引(除了主键)。使用某种全文索引并更改搜索是否更好?或者在给定数据量(不是很大)的情况下,当我使用索引时,效率是不够的

,你不能使用<代码>,比如'%%% '/c> >,所以如果你需要在字符串中间搜索,不用麻烦使用索引< /p> 这就是为什么MATCH命令允许使用前缀通配符,但不允许使用后缀wilcards。由于单个单词被编入索引,所以后缀通配符不可能以索引通常的方式进行管理。您无法立即从索引中检索“*nited states”,因为左字符是索引中最重要的部分


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


建议-在sql中使用LIMIT子句,以便将结果集限制在可管理的大小。。假设一次15条记录。

我认为15k行不算什么。我认为,即使没有索引,它也可以工作。对用户来说,15K行比数据库更令人难以忍受。你是怎么处理的?他们是否必须先输入状态,然后输入3个以上字符才能自动完成?用户可能面临的最长列表是什么?我将查询限制为25。输入任意3个字符后,搜索就会开始。这不一定是这样。大小合理的文本(非数字)索引工作得很好:最终它只是存储在各种b-树中的数据等等。现在,当谈到各种更新场景和页面阅读的不同细微差别时,事情变得有点复杂了。。。但是索引就是索引。(问题是:查询计划员是否[正确]使用了索引?)