2011-09-27 174 views
2

我有一个200000条记录的邮政编码的mysql表。我想从中选择一个字段post_code,并在文本框中获取自动建议的邮政编码。我会用jQuery来做这件事,但我想知道我应该用哪种方法在php中创建代码并更快地选择记录?如何从大型数据库中更快地选择记录?

+1

你真的有200000个独特的邮政编码吗?如果不是为独特的邮政编码创建一个单独的表并使用它来代替。看起来像非规范化的数据库。 – Shahzeb

+0

独特的邮政编码可以超过20万,甚至加拿大也有大约一百万个独特的邮政编码。 – Alyas

回答

2

没有具体说明,很难给出比“编写更快的查询”更具体的答案。

我打算在这里做一个巨大的假设,并假设您正在创建一个填充自动完成表单的Web应用程序。

你不需要所有的后编码!差远了。

推迟填充自动填充,直到用户开始输入邮编字段。发生这种情况时,请执行AJAX加载以从数据库获取邮编。

为什么这样做比只读取所有邮政编码更好?

因为您现在知道用户的邮政编码以什么字母开头。

了解邮政编码的第一个字母意味着您可以消除数据集中不以相同字母开头的任何邮政编码。您将不得不获取20000个邮编,以便获取少于2000个邮件,从而将性能提高一个数量级。如果您等到用户输入了两个字母,则可以获得更多的数据量。

此外,我假设您在邮政编码列上使用索引,对不对?

+0

是的,您是正确的。看到我对第一个答案的评论:) – aslamdoctor

0

我认为你只是想在“post_code”上创建一个MySql索引?

问:您计划一次提取多少个邮政编码(并传回浏览器)?一?五? 200000?

+0

它将基于前3个字符。所以它会需要前3个字符和显示建议。我认为它不会一次超过100条记录。因为这将在文本框中的自动建议,你可以假设,每个按键(在输入3个或更多字符后)将进行查询 – aslamdoctor

0

你可能要筛选用户的当前输入匹配的记录和查询应该如下:

select postal_code from table_name where postal_code like '<userinput>%' LIMIT 50 eg: '60%' 

并发送回这个结果设置为你的jQuery回调函数。请记得对取回的邮政编码设置限制,因为您不想发回过多的数据,这不仅会影响性能,而且不直接帮助用户。

+0

这里的情况是我无法设置记录限制,因为这是一个Web应用程序,它需要建议中的每个可能的邮政编码条目,否则会出现数据录入操作的问题。 – aslamdoctor

+0

考虑一下,如果您确实显示用户1000条记录,您认为用户通过该列表浏览并找到正确的邮政编码是合理的吗?他会尝试进一步过滤吗? – Baz1nga

相关问题