如何为大型DB表创建索引

时间:2013-03-14 00:57:14

标签: mysql indexing mysqldump

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

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

目前我使用以下查询:

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

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

(对于额外的积分!:将使用mysqldump备份索引吗?)

谢谢!

5 个答案:

答案 0 :(得分:2)

您没有替换查询。优化程序将使用该索引获取您的查询。索引驻留在服务器上,不属于mysqldump。它虽然会在你的桌子的DDL中。

How do I add indices to MySQL tables?。这假设您知道要将索引放在哪个列上(提示:PostalCode

答案 1 :(得分:0)

将索引添加到PostalCode字段,看看性能是否有所改善。

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

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

结帐Adminer。它的安装非常简单,可用于快速修改表格的索引。

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

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

答案 4 :(得分:0)

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

CREATE INDEX postal_index ON postalcode(postalcode);

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