2013-03-14 46 views
0

过去我已经完成了许多常规数据库查询,但现在我拥有大约150万个条目的数据库,并且需要能够快速搜索实时更新。如何为大型数据库表创建索引

我的数据库全部是美国邮政编码和加拿大邮政编码,包括各种纬度,纬度和城市......我需要能够在一秒钟内拉出一个单一的邮政编码或邮政编码并将其发回(使用ajax )到网页。因此,当用户输入邮政编码/邮政编码时,国家,城市和州/省将自动填写。

目前我使用下面的查询:

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

我从来没有现在使用的索引。我如何创建一个并替换我的查询以获得相同的结果?

(加分!?将指数使用mysqldump进行备份)

谢谢!

回答

0

最后,我已经建立了我指数邮政编码直接从MySQL命令行:

CREATE INDEX postal_index ON postalcode(postalcode); 

我的代码搜索从4.89sec去0.00 !!!!!!!

2

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

请参阅How do I add indices to MySQL tables?。这是假设你知道栏把你的指数(提示:PostalCode

+0

+1的奖金问题!谢谢!我会查看你获得的另一篇文章! – 2013-03-14 01:11:42

0

索引添加到PostalCode场,看看性能提高。

我通常使用phpMyAdmin来创建我的索引,但是您可以使用另一个发布建议的命令行。

0

我认为将你的ajax请求分成两份是个好主意。

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

当完整输入邮政编码(或用户不添加新号码)并返回城市和国家时,第二个ajax请求将触发。

单个列的缩小大小,仅数字表可以提高您的第一个ajax请求。

尽管如此,你必须在你的“大”表上添加一个索引。使用phpmyadmin来执行此操作。 作为一条经验法则:只索引你的where子句中的列/列(在你的情况下只有PostalCode)

0

检出Adminer。安装非常简单,可以用来快速修改表格的索引。

你会想在PostalCode上创建一个索引,如果可能的话,你会希望PostalCode成为你的主键。

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