我有一个{35}记录的this.mapView.addViewpointChangedListener(new com.esri.arcgisruntime.mapping.view.ViewpointChangedListener({
viewpointChanged: (args) => {
//do thing
}
}));
表。我还有另一个表[User]
,其中包含约1M条记录。
当我对[UserNote]
和LEFT JOIN
表执行User
时,运行查询会花费很长时间。
我尝试向表中添加索引,但是没有运气!
有什么办法可以解决这个问题?
查询:
UserNote
谢谢
答案 0 :(得分:1)
按u.Name排序
我敢打赌这是您的罪魁祸首。您将产生3500万行的结果,然后必须在联接条件之外的列上对其进行排序。您没有说“长时间”是什么,但是我敢打赌,如果删除order by
,或者在u.Name
上使用WHERE子句限制输出,它将更快。
我假设u.UserID是唯一的,而un.UserID不是,因为每个用户都有很多注释,否则这些注释将在用户表中。我假设un.UserID是该表上某些唯一索引的第一列,可能是该表隐式定义的。如果没有,可能应该是。
您可能有一个内在的连接会更好。但是,该建议以及有关如何编制查询的任何推测都取决于您的实现。
答案 1 :(得分:1)
在UserNote表中为UserID添加非聚集索引,并在Notes列中添加类似的内容
CREATE NONCLUSTERED INDEX UserId_Notes
ON UserNotes (UserId)
INCLUDE (Notes);
这称为覆盖索引,在这种情况下,当您进行联接并要求注释时,您查询不需要在基表(用户注释)上进行查询,它具有所有需要的列在非簇索引中。
您还可以考虑在非聚集索引中添加UserId,Notes。但我不建议这样做。如果不清楚,请发表评论。