国/地域/都市データベースを複数のテーブルに正規化しました。都市には、国への外部キーを持つ地域への外部キーがあります。
CITY
テーブルには、関連付けられた数値を検索するための 2 つの追加の列が含まれていますIPAddress
。ご想像のとおり、city テーブルには 400 万を超えるレコードがあります (世界の都市を表し、地域と国にマップされます)。
CITY
、REGION
、COUNTRY
は、Entity Framework パワー ツールでマップしたエンティティであり、すべて名前列 (それぞれcityname
、regionname
、countryname
を表す) と、インデックスが作成された主キー IDENTITY 列があります。
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
までに数分かかります。distinctCountries
最終的には、(フィールドを使用して) 日付範囲でさらに区切り、visitorhit.datevisited
各 のカウントを返す必要がありますdistinctCountry
。
この操作を高速化する方法についてのアイデアはありますか?