Php 主要问题仍然是,每个SELECT查询将花费很长时间,因为它必须遍历该表中的700万行。我想知道如何加快速度。是的,在html中包含国家->州是明智的。但到那时,这些城市仍需要很长时间才能恢复。有没有办法加快速度?索引是关于什么的?你能告诉我更多关于它的信息
Php 主要问题仍然是,每个SELECT查询将花费很长时间,因为它必须遍历该表中的700万行。我想知道如何加快速度。是的,在html中包含国家->州是明智的。但到那时,这些城市仍需要很长时间才能恢复。有没有办法加快速度?索引是关于什么的?你能告诉我更多关于它的信息,php,mysql,database,caching,Php,Mysql,Database,Caching,主要问题仍然是,每个SELECT查询将花费很长时间,因为它必须遍历该表中的700万行。我想知道如何加快速度。是的,在html中包含国家->州是明智的。但到那时,这些城市仍需要很长时间才能恢复。有没有办法加快速度?索引是关于什么的?你能告诉我更多关于它的信息吗?MySQL手册是你的朋友。发布您的代码/SQL也是如此,这样我们就不会盲目了。在您的建议之后,我无法规范化我的数据是有原因的。原因某些条目不会遵循基本结构。一些条目(城市)有后代(地区、郊区)等等,因此它不是遵循静态结构,而是动态结构。这就
主要问题仍然是,每个SELECT查询将花费很长时间,因为它必须遍历该表中的700万行。我想知道如何加快速度。是的,在html中包含国家->州是明智的。但到那时,这些城市仍需要很长时间才能恢复。有没有办法加快速度?索引是关于什么的?你能告诉我更多关于它的信息吗?MySQL手册是你的朋友。发布您的代码/SQL也是如此,这样我们就不会盲目了。在您的建议之后,我无法规范化我的数据是有原因的。原因某些条目不会遵循基本结构。一些条目(城市)有后代(地区、郊区)等等,因此它不是遵循静态结构,而是动态结构。这就是为什么geonames只有一个表,并且每个条目都通过parent_id链接到父条目。请读取我的更新。我发布了sql结构。我将看一看索引…听起来像是一个解决方案。您的sql语句与此语句之间的区别是什么:在表上创建索引\u name(columnname1\u columnname2)”;我相信它们是等价的语法(syntaxi?syntaxen?).CREATE INDEX要求您为索引指定一个名称,这并不是必需的。查看表结构,在(父项id、功能项类)上创建一个索引应该这样做。如果在MySql中有任何方法可以这样做,您可能希望通过查看查询执行计划来验证是否正在使用索引。这涉及到一些折衷,但我也注意到,有时会对我正在查找的字段进行加钉(如果它们不是很大的话)由于所有信息都可以直接从索引中检索,而无需查找回表中,因此在索引末尾添加索引可以加快查询速度。请测试并确定最适合您的方法。
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;
$query = "SELECT geoname_id, name
FROM geonames
WHERE parent_id = '$geoname_id'
AND (feature_class = 'A')";
usa;fl;miami;....
usa;fl;orlando;....
COUNTRY Table:
--------------
COUNTRY_KEY 1
THREE_LETTER 'usa'
COUNTRY_NAME 'united states'
..OTHER COLUMNS....
REGION Table:
--------------
COUNTRY_KEY 1
REGION_KEY 10
REGION_CODE 'fl'
REGION_NAME 'florida'
..OTHER COLUMNS....
CITY Table:
--------------
REGION_KEY 10
CITY_KEY 20
CITY_NAME 'miami'
LAT 123.12
LONG 123.12
..OTHER COLUMNS----
SELECT country_key, three_letter
FROM COUNTRY
ORDER BY three_letter;
SELECT region_key, region_code
FROM REGION WHERE country_key = :input_country_key
ORDER BY region_code;
ALTER TABLE geonames_copy ADD INDEX (parent_id, feature_class);