我已經歸一化的國家/地區/城市數據庫到多個表。城市擁有一個擁有外國國家的地區的外交鑰匙。實體框架和外鍵關係生成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()的代碼來更新你的問題;' –