相对较大 table 中的简单 MySQL 查询运行速度非常慢

Simple MySQL query in a relatively large table runs very slow

我有一个数据库 table,其中包含邮政编码、时区、纬度、经度和一些覆盖整个世界的其他位置数据。 table 中有 8,379,070 行。可能超过一半 GB 的数据。 table 称为 timezones

当我尝试 运行 查询以获取邮政编码为“90210”的所有记录时,如下所示: select * from timezones where postcode = 90210; 查询 returns 28 行,但仅在 7.73 秒后。

我尝试添加一个自动递增的主键整数字段,并通过邮政编码字段索引 table,但没有任何帮助。

在这个速度下,table 将无法使用。它应该用于检索网站表单中自动完成邮政编码字段的建议。

有什么方法可以让这个 运行 更快?


这是我的table描述:

+-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | country | varchar(45) | YES | | NULL | | | region1 | varchar(45) | YES | | NULL | | | region2 | varchar(45) | YES | | NULL | | | region3 | varchar(45) | YES | | NULL | | | locality | varchar(45) | YES | | NULL | | | postcode | varchar(45) | YES | MUL | NULL | | | latitude | varchar(45) | YES | | NULL | | | longitude | varchar(45) | YES | | NULL | | | timezone | varchar(45) | YES | | NULL | | | utc | varchar(45) | YES | | NULL | | | dst | varchar(45) | YES | | NULL | | | idx | int(11) | NO | PRI | NULL | auto_increment | +-----------+-------------+------+-----+---------+----------------+ 12 rows in set (0.00 sec)

保持索引 postcode:

create index idx_timezones_postcode on timezones(postcode);

然后,请确保您在编写查询时的类型是正确的:

select tz.*
from timezones tz
where tz.postcode = '90210';

类型转换可以防止索引的使用。