我修改了书呆子晚餐示例,找到指定位置附近的位置。从平面表中选择性能是好的,但我想分割表,所以我有一个通用坐标表(SDB_Geography),并且还加入一个表,其中包含我称之为实体类型(HB_Entity)的特定数据。
我制作了一个名为HbEntityModel的新模型,它存储实体,hb和地理“子模型”。现在的问题是这个查询大约需要5秒钟才能执行。我认为通过这样做可以略微降低性能但是5秒就是荒谬的。有关如何使用currrent表设置提高性能的任何想法,还是我必须回到一个可怕的平台?
public IEnumerable<HbEntityModel> FindByLocation(float latitude, float longitude)
{
return (from entity in db.SDB_Entity.AsEnumerable()
join nearest in NearestEntities(latitude, longitude, 2)
on entity.EntityId equals nearest.EntityId
join hb in db.HB_Entity
on entity.EntityId equals hb.EntityId
join geo in db.SDB_Geography
on entity.GeographyId equals geo.GeographyId
select new HbEntityModel(entity, hb, geo)).AsEnumerable();
}
更新
所有表格包含大约14000条记录。
SDB_Entity 1:0/1 SDB_Geography
SDB_Entity 1:0/1 HB_Entity
搜索产生大约70个HbEntityModels。
如果从单个表中选择相同的查询需要0.3秒,使用IQueryable而不是IEnumerable。
答案 0 :(得分:1)
我在Robban的帮助下找到了如何做到这一点。“请参阅this post.
我重写了函数以使用无参数构造函数,然后可以使用IQueryable。
public IQueryable<HbEntityModel> FindByLocation(float latitude, float longitude)
{
return (from entity in db.SDB_Entity
join nearest in NearestEntities(latitude, longitude, 2)
on entity.EntityId equals nearest.EntityId
join hb in db.HB_Entity
on entity.EntityId equals hb.EntityId
join geo in db.SDB_Geography
on entity.GeographyId equals geo.GeographyId
select new HbEntityModel() { Shared=entity, Specific=hb, Geography=geo }).AsQueryable();
}
现在查询执行大约需要0.4秒,这在某种程度上是可以接受的。希望当我的平均机器到来时,事情会更快。如果有人可以给我提示如何改进查询,使用存储过程或设置一些索引,我将非常感激。