我怎样才能加快查询速度?

kni*_*ing 0 mysql database-design google-maps

我创建了一个表:

    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 
Run Code Online (Sandbox Code Playgroud)

我用它来存储谷歌的谷歌地图标记.

这个表经常更新,我的意思是新的标记被添加到其中

我经常使用这个查询:

    SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '$tileNumber%'
Run Code Online (Sandbox Code Playgroud)

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

瓷砖的编号如下:

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

示例:我正在使用最大缩放15,因此当我向服务器的DB添加新标记时

确定这个标记将位于哪个区块中,例如我们将得到这样的smth

    id_tile = 002013111032032
Run Code Online (Sandbox Code Playgroud)

所有标记都有id_tile,15个数字不少于此.

稍后当用户通过ajax请求查看地图图块时,可以使用此图块

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

       SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '002013111032%'
Run Code Online (Sandbox Code Playgroud)

因此,使用此请求,我可以获得此大块中的所有标记.

小智 5

请尝试以下方法:

ALTER TABLE  `markersstorage2` ADD INDEX (`id_tile` ) ;
Run Code Online (Sandbox Code Playgroud)

  • 您不需要要选择的字段的索引. (2认同)
  • 索引字段具有选择字段,这些字段在回答编辑之前没有在诸如此INDEX(lat,lng,id_tile)之类的语句中使用 (2认同)