我已经归一化的国家/地区/城市数据库到多个表。城市拥有一个拥有外国国家的地区的外交钥匙。实体框架和外键关系生成SQL的性能变慢
的CITY
表包括用于查找相关联的数值IPAddress
2个的附加列。正如你能想象这个城市表中有超过400万的记录(代表其对应回区域,然后一个国家是世界上城市)。
CITY
,REGION
,COUNTRY
是我与实体框架电动工具映射实体,它们有一个名称列(即代表cityname
,regionname
,countryname
,分别),和被索引的主键标识列。
比方说,我有一个表/实体,称为VisitorHit
具有以下栏目:
id as int (primary key, identity)
dateVisited as datetime
FK_City as int (which has a many to one relationship to the CITY entity)
在代码中,我使用VisitorHit
实体,如:
var specialVisitors = VisitorRepository.GetAllSpecialVisitors();
var distinctCountries = specialVisitors.Select(i => i.City.CityName).Distinct().ToArray();
现在GetAllSpecialVisitors
返回的一个子集实际的访问者(它工作得很快)。典型的子集包含大约10,000行。 Select Distinct
声明需要几分钟才能返回。最后,我需要按日期范围(使用visitorhit.datevisited
场),以进一步划定distinctCountries
并返回计数每个distinctCountry
。
我如何能加快这一操作任何想法?
有外键列被正确索引?您是否查看了查询的执行计划以查看潜在的瓶颈? –
虽然我在下面推荐一个答案,它也可能是有用的与'VisitorRepository.GetAllSpecialVisitors()的代码来更新你的问题;' –