如何从大数据库中更快地选择记录?

时间:2011-09-27 05:22:38

标签: php mysql select

我有一个包含200000条记录的邮政编码mysql表。我想从中选择一个字段post_code,并在文本框中获取自动建议的邮政编码。我将使用jquery执行此操作,但我想知道我应该使用哪种方法在php中创建代码并更快地选择记录?

4 个答案:

答案 0 :(得分:2)

如果没有具体细节,很难给出比“写一个更快的查询”更具体的答案。

我将在这里做出一个巨大的假设并假设您正在处理填充自动填充表单的Web应用程序。

您不需要所有邮政编码!差远了。

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

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

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

知道邮政编码的第一个字母意味着您可以删除数据集中不以相同字母开头的任何邮政编码。您将从必须获取20000个邮政编码到必须获取少于2000个,从而将性能提高一个数量级以上。如果您等到用户输入两个字母,您可以进一步获取要提取的数据量。

另外,我假设您在邮政编码栏上使用了索引,对吗?

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以使用Sphinx-Php Api来处理大型数据库 但是你需要首次使用索引器文件进行搜索才能使用这种方式 或者可以去Zend Lucene Search

答案 3 :(得分:0)

您可能希望过滤与用户当前输入相匹配的记录,您的查询应如下所示:

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

并将此结果集发送回您的jquery回调函数。记得设置对检索到的邮政编码的限制,因为你不想发回太多数据,这不仅妨碍了性能,也没有直接帮助用户。