我有一个200000条记录的邮政编码的mysql表。我想从中选择一个字段post_code
,并在文本框中获取自动建议的邮政编码。我会用jQuery来做这件事,但我想知道我应该用哪种方法在php中创建代码并更快地选择记录?如何从大型数据库中更快地选择记录?
回答
没有具体说明,很难给出比“编写更快的查询”更具体的答案。
我打算在这里做一个巨大的假设,并假设您正在创建一个填充自动完成表单的Web应用程序。
你不需要所有的后编码!差远了。
推迟填充自动填充,直到用户开始输入邮编字段。发生这种情况时,请执行AJAX加载以从数据库获取邮编。
为什么这样做比只读取所有邮政编码更好?
因为您现在知道用户的邮政编码以什么字母开头。
了解邮政编码的第一个字母意味着您可以消除数据集中不以相同字母开头的任何邮政编码。您将不得不获取20000个邮编,以便获取少于2000个邮件,从而将性能提高一个数量级。如果您等到用户输入了两个字母,则可以获得更多的数据量。
此外,我假设您在邮政编码列上使用索引,对不对?
是的,您是正确的。看到我对第一个答案的评论:) – aslamdoctor
我认为你只是想在“post_code”上创建一个MySql索引?
问:您计划一次提取多少个邮政编码(并传回浏览器)?一?五? 200000?
它将基于前3个字符。所以它会需要前3个字符和显示建议。我认为它不会一次超过100条记录。因为这将在文本框中的自动建议,你可以假设,每个按键(在输入3个或更多字符后)将进行查询 – aslamdoctor
您可以使用Sphinx-Php Api来处理大数据库
但是您将需要首次使用这种方式为您的搜索索引器文件。
或可以去Zend Lucene Search
你可能要筛选用户的当前输入匹配的记录和查询应该如下:
select postal_code from table_name where postal_code like '<userinput>%' LIMIT 50 eg: '60%'
并发送回这个结果设置为你的jQuery回调函数。请记得对取回的邮政编码设置限制,因为您不想发回过多的数据,这不仅会影响性能,而且不直接帮助用户。
这里的情况是我无法设置记录限制,因为这是一个Web应用程序,它需要建议中的每个可能的邮政编码条目,否则会出现数据录入操作的问题。 – aslamdoctor
考虑一下,如果您确实显示用户1000条记录,您认为用户通过该列表浏览并找到正确的邮政编码是合理的吗?他会尝试进一步过滤吗? – Baz1nga
- 1. 从数据库mysql中选择记录
- 2. 如何从MySQL数据库中选择一条随机记录?
- 3. 如何从php数据库选择类似的记录?
- 4. 大型数据库500万条记录
- 5. 在大型数据库表中标记重复记录的最快方法
- 6. 如何更快地过滤gridview记录?
- 7. 根据选择查询结果更新数据库记录
- 8. 从记录收集类型中选择数据
- 9. 无法从数据库中选择记录
- 10. 列出从数据库中选择的记录。
- 11. 从MYSQL数据库中选择记录按天分组
- 12. 我想从moodle数据库中选择一条记录
- 13. 选择从数据库中唯一记录
- 14. 使用SQL从Access数据库中选择记录对
- 15. 从数据库中选择一条记录Flask/Sqlite
- 16. 从MYSQL数据库中选择子记录的有效方法
- 17. 快速选择100K +记录
- 18. 如何从数据库中的表中选择一组行的最高记录?
- 19. 在Django中,如何从数据库中选择100条随机记录?
- 20. 如何在android中从数据库(SQLite)中选择特定的记录?
- 21. 从数据库中有效地选择最近的(距离)记录
- 22. 从数据库中选择比最新的100条记录还旧的记录
- 23. MySQL如何从今天记录的表中选择数据?
- 24. 如何从服务器数据库检索记录到本地数据库中
- 25. 如何正确地从数据库中删除记录列表?
- 26. 在mysql中选择最大记录数
- 27. 如何从选择标记中获取值到数据库
- 28. 选择更大的RRN的记录
- 29. 如何最好地从大型SQLite数据库中有效地提取数据?
- 30. 从SQL数据库包含相同的ID作为.NET数据表记录如何选择记录
你真的有200000个独特的邮政编码吗?如果不是为独特的邮政编码创建一个单独的表并使用它来代替。看起来像非规范化的数据库。 – Shahzeb
独特的邮政编码可以超过20万,甚至加拿大也有大约一百万个独特的邮政编码。 – Alyas