如何使用TEXT类型字段在MySQL上获得快速性能?

时间:2014-02-07 06:29:41

标签: php mysql database performance google-maps

我正在做一个Gmap应用程序有一个表单和一个表。 我有一些性能问题。 以下是我所拥有的。

  

表:my_routes

id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT
name VARCHAR(255)
coordinates MEDIUMTEXT
  

我的表格:

<form action="save.php">
<div id="map">GMap Here</div>
<input type="hidden" name="id" />
<input type="text" name="name" />
<input type="hidden" name="coordinates" />
<input type="submit" name="btnsave"/>
</form>

我正在添加新标记,它会给我所有方向坐标,我将在隐藏字段中存储“坐标”

此字段包含大量坐标 e.g。

"46.963530000000006,7.950190000000001;46.96359,7.950360000000001;46.963640000000005,7.95049;46.963680000000004,7.95063;46.96374,7.9507900000000005;46.96378000000001,7.950950000000001;46.963800000000006,7.95105;46.96381,7.95117;46.96381,7.951280000000001;46.96378000000001,7.951480000000001;46.96374,7.951650000000001;46.96367,7.9519400000000005;46.963640000000005,7.952100000000001;46.96360000000001,7.952370000000001;46.96358,7.952580000000001;46.96356,7.95272;46.963550000000005,7.952870000000001;46.96356,7.952960000000001;46.96358,7.953050000000001;"

当我保存数据时,它会保存,但需要花费太多时间进行保存,以及获取数据以进行修改时。

  

我在WAMP服务器(PHP)上有以下设置

max_allowed_packet = 1024M
max_execution_time = 180
post_max_size = 128M

任何人都可以帮我解决这个问题吗? 为获得GMap表格的良好表现有哪些变化或建议?

欢迎,建议

1 个答案:

答案 0 :(得分:1)

我建议您使用DECIMAL数据类型来存储坐标,并可能将数据拆分为两个表,例如 -

CREATE TABLE main (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;

CREATE TABLE coordinates (
  id int(11) NOT NULL AUTO_INCREMENT,
  id_fk int(11) NOT NULL,
  latitude decimal(10, 8) DEFAULT NULL,
  longitude decimal(10, 8) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT FK_coordinates_main_id FOREIGN KEY (id_fk)
  REFERENCES main (id) ON DELETE RESTRICT ON UPDATE RESTRICT
)
ENGINE = INNODB;