テーブルを作成しました:
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
すべてのマーカーには、15個以上の数字を持つid_tileがあります。
後でユーザーがマップを見ると、タイルはajaxを介して要求されていますが、このタイルは
ズームレベルを変えると、たとえば次のリクエストが表示されます。
SELECT id, lat,lng FROM markersStorage2 WHERE id_tile LIKE '002013111032%'
したがって、このリクエストを使用すると、この大きなタイルのすべてのマーカーを取得できます。