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

时间:2015-09-29 09:50:08

标签: mysql optimization query-performance

我有一个数据库表,其中包含拉链码,时区,纬度,经度以及覆盖整个世界的一些其他位置数据。表中有8,379,070行。可能是超过一半的GB数据。该表名为timezones

当我尝试运行查询以获取邮政编码为" 90210"的所有记录时像这样: select * from timezones where postcode = 90210; 查询返回28行,但仅在7.73秒后返回。

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

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

有什么方法可以让它跑得更快?

这是我的表格描述:

+-----------+-------------+------+-----+---------+----------------+ | 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)

1 个答案:

答案 0 :(得分:4)

将索引保持在postcode

create index idx_timezones_postcode on timezones(postcode);

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

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

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