SQL-记录检索非常慢

时间:2018-11-21 17:01:00

标签: sql

我有一个{35}记录的this.mapView.addViewpointChangedListener(new com.esri.arcgisruntime.mapping.view.ViewpointChangedListener({ viewpointChanged: (args) => { //do thing } })); 表。我还有另一个表[User],其中包含约1M条记录。

当我对[UserNote]LEFT JOIN表执行User时,运行查询会花费很长时间。

我尝试向表中添加索引,但是没有运气!

有什么办法可以解决这个问题?

查询:

UserNote

谢谢

2 个答案:

答案 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。但我不建议这样做。如果不清楚,请发表评论。