Benim mysql veritabanındaki tüm ülkeler, devletler ve şehirler içeren, geonames veritabanı var.
o nereden geldiğini kullanıcı seçmek öylesine i basamaklı bir menü oluşturmak için kullanıyorum: ülke -> Devlet -> ilçe -> şehir.
ancak asıl sorun sorgu bu tablodaki tüm 7 milyon satır i yoluyla çocukların satırların listesini almak istiyorum her zaman arar, ve bu bir süre 10-15 saniye alıyor olmasıdır.
i bu hızlandırmak nasıl acaba: önbelleğe? tablo görünümlerini? nasılsa Tablo yapısını yeniden düzenlemek?
ve en önemlisi, ben bunları nasıl yapacağız? Bana link verebilecek iyi dersler var?
i tüm yardım ve geri bildirim bu sorunu ele akıllı yollarını tartışırken takdir!
GÜNCELLEME: burada benim tablo yapısı:
CREATE TABLE `geonames_copy` (
`geoname_id` mediumint(9) NOT NULL,
`parent_id` mediumint(9) DEFAULT NULL,
`name` varchar(200) DEFAULT NULL,
`ascii_name` varchar(200) DEFAULT NULL,
`alternate_names` varchar(4000) DEFAULT NULL,
`latitude` decimal(10,7) DEFAULT NULL,
`longitude` decimal(10,7) DEFAULT NULL,
`feature_class` char(1) DEFAULT NULL,
`feature_code` varchar(10) DEFAULT NULL,
`country_code` varchar(2) DEFAULT NULL,
`cc2` varchar(60) DEFAULT NULL,
`admin1_code` varchar(20) DEFAULT NULL,
`admin2_code` varchar(80) DEFAULT NULL,
`admin3_code` varchar(20) DEFAULT NULL,
`admin4_code` varchar(20) DEFAULT NULL,
`population` bigint(20) DEFAULT NULL,
`elevation` int(11) DEFAULT NULL,
`gtopo30` smallint(6) DEFAULT NULL,
`time_zone` varchar(40) DEFAULT NULL,
`modification_date` date DEFAULT NULL,
PRIMARY KEY (`geoname_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ve burada sql sorgu:
$query = "SELECT geoname_id, name
FROM geonames
WHERE parent_id = '$geoname_id'
AND (feature_class = 'A')";
parent_id ve feature_class: ben sadece 2 sütun için bir dizin oluşturmanız gerekir?
bir soru: yerine mysql kullanarak Solr ile bir dizin oluşturmak için daha iyi değil mi? bir yararı im zaten SOLR kullanarak ve başka bir tam metin arama destekler olmasıdır. belki bu yüzden (en iyi olmak için 2 şey) SOLR ve mysql hem dont kullanmak daha iyi?