0

我过去做过很多常规的数据库查询,但现在我有一个包含大约 150 万个条目的数据库,我需要能够快速搜索实时更新。

我的数据库是所有美国邮政编码和加拿大邮政编码,包括经度、纬度、城市......我需要能够在几分之一秒内提取一个邮政编码并将其发送回(使用 ajax)到网络页。因此,当用户输入邮政编码/邮编时,国家、城市和州/省会自动填写。

目前我使用以下查询:

$sql = "SELECT  city, province, country 
  FROM postalcode
  WHERE PostalCode='$zip'";

我以前从未使用过索引。如何创建一个并替换我的查询以获得相同的结果?

(加分!:索引会用mysqldump备份吗?)

谢谢你!

4

5 回答 5

2

您不替换查询。优化器将使用该索引来获取您的查询。索引驻留在服务器上,不属于mysqldump. 不过,它将在您的表的 DDL 中。

请参阅如何向 MySQL 表添加索引?. 这假设您知道将索引放在哪一PostalCode列(提示:)

于 2013-03-14T01:00:16.103 回答
0

将索引添加到PostalCode字段中,看看性能是否有所提高。

我通常使用 phpMyAdmin 来创建我的索引,但您可以按照另一篇帖子的建议使用命令行。

于 2013-03-14T01:01:34.003 回答
0

我认为将您的 ajax 请求一分为二是个好主意。

第一个 ajax 请求仅从表中提取可用的邮政编码(一个新的,只有邮政编码)。

第二个 ajax 请求在邮政编码完全输入时触发(或者当用户没有添加新号码时)并返回城市和国家。

单个列的减小的大小,仅数字表可以改善您的第一个 ajax 请求。

尽管如此,您必须在“大”表上添加索引。使用 phpmyadmin 来执行此操作。根据经验:仅索引 where 子句中的列/列(在您的情况下仅 PostalCode)

于 2013-03-14T01:16:03.497 回答
0

查看管理员。它安装非常简单,可用于快速修改表的索引。

您需要在 PostalCode 上创建一个索引,并且如果可能的话,您会希望 PostalCode 作为您的主键。

如果您仍然遇到查询时间过长的问题,请尝试增加您的 Innodb_buffer_pool 以使其足够大以包含完整的邮政编码表。

于 2013-03-14T02:18:09.270 回答
0

最后,我直接从 mySQL 命令行在邮政编码上创建了索引:

CREATE INDEX postal_index ON postalcode(postalcode);

我对代码的搜索从 4.89 秒到 0.00 秒!!!!!!!!!

于 2013-03-16T17:22:40.437 回答