我创建了一张桌子:
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,因此当我向DB添加新标记时服务器
确定此标记位于哪个图块中,例如我们将像这样获得smth
id_tile = 002013111032032
所有标记都有id_tile,15个数字不少于此。
稍后当用户通过ajax请求查看地图图块时,此图块可以
处于不同的缩放级别,例如我们会收到此请求:
SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '002013111032%'
因此,使用此请求,我可以获得此大块中的所有标记。
答案 0 :(得分:5)
尝试以下方法:
ALTER TABLE `markersstorage2` ADD INDEX (`id_tile` ) ;
答案 1 :(得分:3)
你需要在id_tile字段上放一个索引。
ALTER TABLE `markersstorage2` ADD INDEX `id_tile` (`id_tile`);
您可以检查您的查询是否使用索引:
解释SELECT id,lat,lng FROM markersStorage2 WHERE id_tile LIKE ' 3%'
没有索引
带索引的" ID&#34 ;;" SELECT_TYPE&#34 ;;"表&#34 ;;"类型&#34 ;;" possible_keys&#34 ;;&# 34;键&#34 ;;" key_len&#34 ;;" REF&#34 ;;"行&#34 ;;"额外" " 1&#34 ;;" SIMPLE&#34 ;;" markersStorage2&#34 ;;" ALL&#34 ;; NULL; NULL; NULL; NULL;" 7&# 34 ;;"使用 其中"
" ID&#34 ;;" SELECT_TYPE&#34 ;;"表&#34 ;;"类型&#34 ;;" possible_keys&#34 ;;&# 34;键&#34 ;;" key_len&#34 ;;" REF&#34 ;;"行&#34 ;;"额外" " 1&#34 ;;" SIMPLE&#34 ;;" markersStorage2&#34 ;;"范围&#34 ;;" id_tile&#34 ;;" id_tile& #34 ;;" 47&#34 ;; NULL;" 3&#34 ;;"使用 其中"