1

这实际上是我在此处询问的关于如何提高SELECT简单只读数据库的查询性能的先前问题的后续。长话短说,然后我找到了这个问题和自写答案,它可能会解决我的问题,但是我在理解该页面上显示的 SQL 语句之一时遇到了一些麻烦。

您可以在我的原始问题中找到更多详细信息,但总而言之,我的表格如下所示:

`squares` (
   `square_id` int(7) unsigned NOT NULL,
   `ref_coord_lat` double(8,6) NOT NULL,
   `ref_coord_long` double(9,6) NOT NULL,
   PRIMARY KEY (`square_id`),
   KEY `ref_coord_lat` (`ref_coord_lat`),
   KEY `ref_coord_long` (`ref_coord_long`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

在每个选择查询 1.40-1.45 秒时执行太慢,我不喜欢。我发现的 Q+A 建议将数据库从 切换InnoDBMyISAM以支持 MySQL 的空间扩展。我现在已经这样做了,并创建了一个NOT NULL,列,我打算分别用和GEOMETRY POINT的纬度和经度坐标填充该列。唯一的事情是我实现这一点的查询根本不起作用。我不知道为什么。ref_coord_latref_coord_long

这是用于填充几何列的答案的查询:

GeomFromText(CONCAT('LINESTRING(', start_ip, ' -1, ', end_ip, ' 1)'))

这是我为了我的目的而进行的改编尝试:

UPDATE `squares` SET `coordinate` = PointFromText(CONCAT('POINT(', ref_coord_lat, ref_coord_long, ')'))

除了这不起作用。

phpMyAdmin 没有提醒我任何 SQL 语法错误,事实上,我得到的只是一个绿色的“已完成”框,它通知我“0 行受到影响(查询耗时 0.00007 秒)”。

任何想法为什么我的查询无法正常运行?

4

1 回答 1

1

我能看到的一件事是您的坐标之间没有空格。试试这个:

UPDATE `squares` SET `coordinate` = PointFromText(CONCAT('POINT(', ref_coord_lat, ' ', ref_coord_long, ')'));
于 2013-08-13T14:24:52.887 回答