[英]How can i speed up query?
我創建了一個表:
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%'
因此,使用此請求,我可以獲得該大圖塊中的所有標記。
請嘗試以下操作:
ALTER TABLE `markersstorage2` ADD INDEX (`id_tile` ) ;
您需要在id_tile字段上添加索引。
ALTER TABLE `markersstorage2` ADD INDEX `id_tile` (`id_tile`);
您可以檢查查詢是否使用索引,例如:
解釋SELECT ID,LAT,LNG從markersStorage2在哪里id_tile喜歡'3%'
沒有索引
“ id”;“ select_type”;“ table”;“ type”;“ possible_keys”;“ key”;“ key_len”;“ ref”;“ rows”;“ Extra”“ 1”;“ SIMPLE”;“ markersStorage2” ;“ ALL”; NULL; NULL; NULL; NULL;“ 7”;“在哪里使用”
帶索引
“ id”;“ select_type”;“ table”;“ type”;“ possible_keys”;“ key”;“ key_len”;“ ref”;“ rows”;“ Extra”“ 1”;“ SIMPLE”;“ markersStorage2” ;“范圍”;“ id_tile”;“ id_tile”;“ 47”; NULL;“ 3”;“在哪里使用”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.