0

我创建了一个表:

    CREATE TABLE IF NOT EXISTS `markersStorage2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
      `surname` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
      `id_vk` int(10) NOT NULL,
      `activity_link` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
      `message` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
      `lat` float(10,6) NOT NULL,
      `lng` float(10,6) NOT NULL,
      `type` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
      `id_tile` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

我用它来按图块存储谷歌地图标记。

此表经常更新,我的意思是向其中添加了新标记

我经常使用这个查询:

    SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '$tileNumber%'

我怎样才能加快这个查询?也许我需要创建另一个表或重新组织这个表?

瓷砖的编号如下:

http://msdn.microsoft.com/en-us/library/bb259689.aspx

示例:我使用的是最大缩放 15,因此当我向数据库添加新标记时,服务器

确定该标记将位于哪个图块中,例如我们将像这样得到

    id_tile = 002013111032032

所有标记的 id_tile 都包含 15 个数字。

稍后,当用户通过 ajax 请求查看地图图块时,但这些图块可以

处于不同的缩放级别,例如我们将收到此请求:

       SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '002013111032%'

所以使用这个请求我可以得到这个大图块中的所有标记。

4

2 回答 2

5

尝试以下操作:

ALTER TABLE  `markersstorage2` ADD INDEX (`id_tile` ) ;
于 2012-04-22T16:06:32.220 回答
3

您需要在 id_tile 字段上放置一个索引。

ALTER TABLE `markersstorage2`  ADD INDEX `id_tile` (`id_tile`);

您可以检查您的查询是否使用索引,如下所示:

解释 SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '3%'

无索引

“id”;“select_type”;“table”;“type”;“possible_keys”;“key”;“key_len”;“ref”;“rows”;“额外”“1”;“SIMPLE”;“markersStorage2” ;"ALL";NULL;NULL;NULL;NULL;"7";"在哪里使用"

带索引

“id”;“select_type”;“table”;“type”;“possible_keys”;“key”;“key_len”;“ref”;“rows”;“额外”“1”;“SIMPLE”;“markersStorage2” ;"范围";"id_tile";"id_tile";"47";NULL;"3";"在哪里使用"

于 2012-04-22T16:11:48.667 回答