我有一个数据库表,其中包含拉链码,时区,纬度,经度以及覆盖整个世界的一些其他位置数据。表中有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)
答案 0 :(得分:4)
将索引保持在postcode
:
create index idx_timezones_postcode on timezones(postcode);
然后,在编写查询时确保您的类型正确无误:
select tz.*
from timezones tz
where tz.postcode = '90210';
类型转换可以阻止使用索引。