我过去做了很多常规数据库查询,但现在我有一个大约150万条目的数据库,我需要能够快速搜索实时更新。
我的数据库是所有美国邮政编码和加拿大邮政编码,包括长期,纬度,城市......我需要能够在几分之一秒内拉出一个单独的邮政编码并将其发回(使用ajax)到网页。因此,当用户输入邮政编码/邮编时,国家,城市和州/省自动填写。
目前我使用以下查询:
$sql = "SELECT city, province, country
FROM postalcode
WHERE PostalCode='$zip'";
我以前从未使用过索引。我怎么能创建一个并替换我的查询以获得相同的结果?
(对于额外的积分!:将使用mysqldump备份索引吗?)
谢谢!
答案 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 !!!!!!!