【发布时间】:2010-04-16 23:57:34
【问题描述】:
我有以下查询,它获取城市名称、城市 ID、地区名称以及该记录的重复名称计数:
选择 Country_CA.City 作为 currentCity,Country_CA.CityID,globe_region.region_name, ( SELECT count(Country_CA.City) FROM Country_CA WHERE City LIKE currentCity ) 作为计数器 FROM Country_CA 左连接地球区域 ON globe_region.region_id = Country_CA.RegionID AND globe_region.country_code = Country_CA.CountryCode 按城市订购此示例适用于加拿大,城市将显示在下拉列表中。
加拿大和其他国家/地区有几个城镇名称相同。因此,我想知道是否有多个城镇名称相同的地区名称将附加到城镇名称中。区域名称可在 globe_region 表中找到。
Country_CA 和 globe_region 看起来与此类似(出于可视化目的,我更改了一些内容)
如果不存在`Country_CA`,则创建表( `City` varchar(75) NOT NULL DEFAULT '', `RegionID` varchar(10) NOT NULL DEFAULT '', `CountryCode` varchar(10) NOT NULL DEFAULT '', `CityID` int(11) NOT NULL DEFAULT '0', 主键(`City`,`RegionID`), KEY `CityID` (`CityID`) ) 引擎=MyISAM 默认字符集=utf8;与
如果不存在 `globe_region` 则创建表( `country_code` char(2) 整理 utf8_unicode_ci NOT NULL, `region_code` char(2) 整理 utf8_unicode_ci NOT NULL, `region_name` varchar(50) 整理 utf8_unicode_ci NOT NULL, 主键(`country_code`,`region_code`) ) 引擎=MyISAM 默认字符集=utf8 排序=utf8_unicode_ci;顶部的查询完全符合我的要求,但是生成 5000 条记录的列表需要很长时间。我想知道是否有办法优化子查询以便更快地获得相同的结果。
结果应该是这样的
城市 CityID region_name 计数器 喜来登 2349269 不列颠哥伦比亚省 1 舍布鲁克 2349270 魁北克 2 舍布鲁克 2349271 新斯科舍省 2 在这里 2349273 不列颠哥伦比亚省 1 谢里登 2349274 马尼托巴省 1【问题讨论】:
标签: mysql optimization